一個數組a[0...n-1],求a[i]-a[j]的最大值,其中i>j
其實這道題有O(n)的方法。
第一種方法:
左往右求下標1到 k - 1 的最大值MAX
右往左求 下標k到n -1 的最小值MIN
對於每個k都有一個MAX - MIN的值,最後求這個值的最大值即可。
比如4 5 2 6 3 1
MAX 4 4 2 2 2
MIN 1 3 6 6 6
左上減去右下,最大的值為6 - 2 = 4, 即為結果
第二種方法:
令b[i] = a[i + 1] - a[i],那麼a[i] - a[j] = b[j] + ... b[i - 1],即將問題轉化成求一個數組子序列的最大值。這個過程的演算法是有O(n)的演算法的。
相關推薦
linux下的select簡直太奇葩了:1024限定的不只是監聽的個數,還是檔案描述符的最大值,注意,是值
轉自:http://m.blog.csdn.net/blog/wuzili1234/12450451 我原來自以為對select就算不熟,基本原理和使用方法也略知一二了,做了一年多的伺服器程式設計,好歹知道linux下的select不支援超過1024個的描述符,好歹知道
Java程式設計:定義一個int型的一維陣列,包含10個元素,分別賦一些隨機整數,然後求出所有元素的最大值,最小值,平均值,和值,並輸出出來。
public class Program1 {/**1.定義一個int型的一維陣列,包含10個元素,分別賦一些隨機整數,然後求出所有元素的最大值,最小值,平均值,和值,並輸出出來。*/public static void main(String[] args) { int[
使用線段樹求陣列各區間的最大值,最小值,和
輸入 :第一行輸入n(陣列內元素的個數);第二行 n個數(陣列內的元素);之後每行兩個數x,y(所詢問區間)。 輸出 :分別輸出詢問區間內的最大值,最小值,和。 #include<iostream> #include<algorithm> #inc
一個數組a[0...n-1],求a[i]-a[j]的最大值,其中i>j
其實這道題有O(n)的方法。 第一種方法: 左往右求下標1到 k - 1 的最大值MAX右往左求 下標k到n -1 的最小值MIN 對於每個k都有一個MAX - MIN的值,最後求這個值的最大值即可。 比如4 5 2 6 3 1 MAX 4 4 2 2 2 MIN 1 3
【Python】給定一個數組A[0,…,n-1],求A的連續子陣列,使得該子陣列的和最大
最大子陣列 給定一個數組A[0,…,n-1],求A的連續子陣列,使得該子陣列的和最大。 例如陣列: 1, -2, 3, 10, -4, 7, 2, -5 最大子陣列:3, 10, -4, 7, 2 演算法分析 定義:字首和sum[i
給定一個數組A[0,1,...,n-1],請構建一個數組B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法
題目描述 給定一個數組A[0,1,...,n-1],請構建一個數組B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。 /* 思路:題目要求B的i個元素等於A中除了i個元素所以元素乘積 因此思路很清
給定陣列a[0:n-1]試設計一個演算法,在最壞情況下用[3n/2 -2 ] 次比較找出a[0:n-1]中元素的最大值和最小值;教材2-15
給定陣列a[0:n-1]試設計一個演算法,在最壞情況下用[3n/2 -2 ] 次比較找出a[0:n-1]中元素的最大值和最小值; 解:要求對於陣列用小於【3n/2-2】的比較次數找到兩個最值 可以用陣列第一個元素來初始化max,min 然後遍歷陣列,分別和max,min比較,一遍就可以找
讓一個數組中存在N多個函式。讓每個函式執行的 時候自動加1
function test(){ var arr = [ ]; for (var i = 0; i < 10; i++) { (function(i){ arr[i] = function(){ console.log(i);
繼續對上一頁的ecah進行 優化,求一個數組的和,最大值,最小值,獲取陣列中的元素,3
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style t
JS 求一組陣列中的最大值,最小值(不包括0)。
<body> <script type="text/javascript"> var arr=[]; do{ var num=prompt("請輸入一個整數:") if(num!=0){
類模板---求陣列的最大值 找出一個數組中的元素的最大值,陣列大小為10。(用類模板來實現) 陣列元素型別作為類模板的引數。 在下面的程式段基礎上完成設計,只提交begin到end部
#include <iostream> #include <string> using namespace std; template <class T> class Array_max //宣告類模板 {
javascript 位操作 檢視一個數x位0或者1 指定一個數的x位0或1
基本操作: (1) & :按位“與”——僅當兩個運算元為1時,結果為1,否則為0。如:1000 1000 & 1000 0001 = 1000 0000; (2) | :按位“或”——僅當兩個運算元為0時,結果為0,否則為1。如:1000
求一個數組中重複元素出現最多值,最大的元素及出現次數,次數相同時,取最大值,優先考慮次數
#include <iostream> #include <string> #include <map> using namespace std; void maxNumTimes(int a[], int len, int b[])
程式設計中無窮大的設定 很多人可能設為0x7fffffff,這個數的確是32-bit int的最大值,符號位為0,其他的都是1 但在很多情況下,0x7fffffff會出現錯誤,比如溢位,這樣兩個無窮大數相
很多人可能設為0x7fffffff,這個數的確是32-bit int的最大值,符號位為0,其他的都是1 但在很多情況下,0x7fffffff會出現錯誤,比如溢位,這樣兩個無窮大數相加會變成負數,還有如在做dijkstra求最短路時,當做鬆弛操作,判斷if (d[u]+w
求一個數組中, 連續幾個數的最大值,及其變種
import java.util.Arrays; import java.util.Scanner; public class KeShui { public static int max = 0; //網易瞌睡 public static void maxiva
編寫一個遞迴模板函式,確定元素x是否屬於陣列a[0:n-1]
利用pos記錄遞迴的層數,當遞迴到第n + 1層(也就是到了判斷x == a[n]時)返回false C++程式碼如下: #include <bits/stdc++.h> // 萬能標頭檔案(注意:POJ上無法使用) using namespace st
從一組集合中獲取,分多次取集合中的每段數據中的最大值,重組成一個新的集合。
clas pub 處理 oat private color andro sublist roi 一個項目中偶遇的簡單算法,個人覺得還不錯,雖不常用,也記錄在此吧。 1 package huolongluo.qihuo.util; 2 3 import androi
給出n個數,找出這n個數的最大值,最小值,以及這些數字的和
<div class="sec_header">問題描述</div><div class="sec_cont"><p>給出n個數,找出這n個數的最大值,最小值,和。</p></div><div c
一個數組 裡面正數和負數求所有子陣列的最大值
#include <iostream> using namespace std; int maxSum(int* a, int n) {int sum = 0;//其實要處理全是負數的情況,很簡單,如稍後下面第3點所見,直接把這句改成:"int sum=a[
shell指令碼之任意輸入n個數,判斷最大值,最小值,總和
#!/bin/bash ##任意輸入n個數,判斷最大值,最小值,總和 sum=0 n=0 read -p "please input the count of number:" count #max