演算法 單峰序列

2021-09-01 20:30:12 字數 722 閱讀 3682

問題描述

給定含有n個不同整數的陣列l=,如果l中存在ai,使得a1ai+1>…>an。則稱l是單峰的,並稱ai是l的「峰頂」。假設l是單峰的,設計乙個演算法,找l的峰頂。

輸入形式

一共包括兩行,第一行乙個整數n,表示陣列中整數的個數。

接下來的一行中包含n個整數,以空格分隔

輸出形式

如果這些整數中存在峰頂元素ai,則輸出該元素的下標i,否則輸出0

樣例輸入

9

1 2 5 7 9 8 6 4 3

樣例輸出5

另一組樣例:

輸入:9

3 5 6 2 9 8 7 4 1

輸出:0

用二分法將序列一分為二,假設乙個小的分段只有三個數值,比較這三個數的大小,來決定左右界的調整。同時要注意符合要求的這個分組左右邊的其他分組是否符合要求,若不符合則當前分組也不符合要求。

#includeusing namespace std;

int summit(int l,int left,int right)

int main()

單峰陣列求第k大演算法

單峰陣列實際上可以看成兩個有序的陣列,這個問題就轉變成了兩個有序陣列求第k大。容易想到的演算法是對這兩個陣列進行歸併,生成乙個新的有序陣列,求出第k大之後就可以立刻停止,複雜度是o k 的。但是還有更優的演算法,可以使用分治的思想 實際上也是一種二分 來計算。對於兩個有序的陣列a和b,取出他們第k ...

單峰回文脫模

題目描述 如果值不降低到中間值,則回文序列是單峰回文序列,然後 由於該序列是回文序列 不從中間增加到終點,例如,上面的第乙個示例序列不是單峰回文序列,而第二個例子是。單峰回文序列是整數n的單峰回文分解,如果數列中的整數之和為n,例如,前幾個整數的單峰回文分解如下 1 1 2 2 1 1 3 3 1 ...

不可變序列演算法 可變序列演算法

search演算法 在乙個序列中搜尋與另一串行匹配的子串行。引數分別為乙個序列的開始位置,結束位置和另乙個序列的開始,結束位置。函式原型 search v1.begin v1.end v2.begin v2.end search n演算法 重複元素子串行搜尋search n 函式搜尋序列中是否有一系...