趣味演算法 求波峰波谷最大值

2021-07-10 08:30:16 字數 1291 閱讀 6148

給乙個陣列,求它的最大的波峰波谷的落差。

舉例:陣列  a=, 其中 6 和 9 被看做是波峰,2和5則是波谷。d[2, 6]=4, d[6,5]=1, d=[5,9]=4. 則 thus, maxd(a)=4.

想法:波峰不一定是陣列中的最大值,他是趨勢向下的轉折點,波谷也不一定是陣列中的最小值,他是趨勢向上的轉折點。陣列中最邊上的兩個元素比較特殊,他們必然屬於轉折的部分。如果a[0] < a[1]  則a[0]是波谷,反之則是波峰。

先掃瞄一次陣列,找到其中所有的轉折點,然後配對計算出他們的差,取差最大的。

測試資料:

2 3 6 5 7 9

2 3 6 5 7

2 3 6 5 7 9 10

示例程式:

#include using namespace std;

void scanpeak(int arr, int length, int* pvlst)

else if ((arr[i] > arr[i-1]) && (arr[i] > arr[i+1]))

}if (arr[0] < arr[1])

pvlst[0] = -1;

else if (arr[0] > arr[1])

pvlst[0] = 1;

if (arr[length-1] < arr[length-2])

pvlst[length-1] = -1;

else if (arr[length-1] > arr[length-2])

pvlst[length-1] = 1;

}void maxneighboringpeak(int arr, int length)

cout << endl << endl;

for (i = 0; i < length; i++)

if (pvlst[i] == -1)

if (2 == pair)

}cout << max << endl;

delete pvlst;

pvlst = null;

}int main()

; //int arr[5] = ;

int arr[7] = ;

int length = sizeof(arr)/sizeof(arr[0]);

maxneighboringpeak(arr, length);

cout<> length;

return 0;

}

測試結果:

-1  0  1  -1  0  0  1

5

演算法提高 求最大值

演算法提高 求最大值 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給n個有序整數對ai bi,你需要選擇一些整數對 使得所有你選定的數的ai bi的和最大。並且要求你選定的數對的ai之和非負,bi之和非負。輸入格式 輸入的第一行為n,數對的個數 以下n行每行兩個整數 ai bi 輸出格...

試題 演算法提高 求最大值

時間限制 1.0s 記憶體限制 256.0mb 問題描述 給n個有序整數對ai bi,你需要選擇一些整數對 使得所有你選定的數的ai bi的和最大。並且要求你選定的數對的ai之和非負,bi之和非負。輸入格式 輸入的第一行為n,數對的個數 以下n行每行兩個整數 ai bi 輸出格式 輸出你選定的數對的...

qduoj 求最大值

題目 描述給定 個數,a 1 到a n 請你幫忙找出a i a j 的最大值,其中1 i j n 輸入第一行乙個數 表示一共有 組資料 t 20 每組測試資料第一行乙個整數 2 n 10 表示接下來有 個數,第二行 個整數,不超過10 6,中間用空格隔開。輸出每組資料輸出一行,表示最大值是多少。樣例...