<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      11 尋找峰值(Find Peak Element)

      1 題目

      ??尋找峰值(Find Peak Element)

      lintcode:題號——75,難度——medium

      2 描述

      ??給定一個整數數組(size為n),其具有以下特點:相鄰位置的數字是不同的;A[0] < A[1] 并且 A[n - 2] > A[n - 1];假定P是峰值的位置則滿足A[P] > A[P-1]且A[P] > A[P+1],返回數組中任意一個峰值的位置。數組保證至少存在一個峰;如果數組存在多個峰,返回其中任意一個就行;數組至少包含 3 個數。

      ??樣例1:

      輸入:A = [1, 2, 1, 3, 4, 5, 7, 6]
      輸出:1
      解釋:

      返回任意一個峰頂元素的下標,元素2的下標為1,下標6也同樣正確。

      ??樣例2:

      輸入:A = [1,2,3,4,1]
      輸出:3
      解釋:

      返回峰頂元素4的下標3。

      3 思路

      ??尋找峰值點,峰值點的特征是點的左邊處于遞增狀態、右邊處于遞減狀態。題中對數組做了一些限定:A[0] < A[1],即起點是遞增狀態; A[n - 2] > A[n - 1],即到達終點時候是遞減狀態,且相鄰位置的數字不同。需要找到數組中的任意一個峰值即可,可以通過遞增遞減的狀態來尋找,即在任意一個區間中,如果起點遞增、終點遞減,那這個區間內一定有峰值,通過二分法拆分為“half half”的方式,每次留下一定存在峰值的區間,拋掉不一定存在峰值的區間,最后即可找到。

      1. 取中點;
      2. 比較中點與下一個點,判斷當前處于遞增還是遞減;
      3. 找到起點遞增、終點遞減這樣的一定存在峰值的區間,拋掉另一半不一定存在峰值的區間。
      4. 重復上述過程,直到找到峰值。

      3.1 圖解

      輸入:A = [1, 2, 1, 3, 4, 5, 7, 6]
      輸出:6
      解釋:

      返回任意一個峰頂元素的下標即可,峰值元素7的下標為6。

      graph TD A --> A1[\拋掉'1, 2, 1'\] A['1, 2, 1, 3, 4, 5, 7, 6'] -- 中間位置元素'3',下一個元素'4',遞增<br/>3..4遞增,7..6遞減,區間必有峰值 --> B B --> B1[\拋掉'3, 4'\] B[縮小區間至'3, 4, 5, 7, 6'] -- 中間位置元素'5',下一個元素'7',遞增<br/>5..7遞增,7..6遞減,區間必有峰值 --> C C[縮小區間至'5, 7, 6'] -- 中間位置元素'7',下一個元素'6',遞減<br/>5..7遞增,7..6遞減,區間必有峰值 --> D C --> C1[/拋掉'6'/] D[縮小區間至'5, 7'] -- 剩下兩個元素取峰值 --> E E(找到目標元素'7',下標'6')

      3.2 時間復雜度

      ??算法的時間復雜度為O(log n)。

      3.3 空間復雜度

      ??算法的空間復雜度為O(1)。

      4 源碼

      ??注意事項:

      1. 最后兩個元素中取峰值的時候,在邏輯上可以直接取end。

      因為在最后一次縮小區間的時候,必定是end = mid的情況。如果最后一次縮小區間是start = mid的情況,則說明在縮小后的區間內start點還是處于遞增的狀態,start必定還不是峰值,區間還能再縮。

      1. 返回的是序號,不是元素值。

      ??C++版本:

      /**
      * @param A: 整數數組
      * @return: 任意峰值點的下標序號
      */
      int findPeak(vector<int> &A) {
      	// write your code here
      	if (A.size() < 3)
      	{
      		return -1;
      	}
      
      	int start = 0;
      	int end = A.size() - 1;
      	int mid = 0;
      	while (start + 1 < end)
      	{
      		mid = start + (end - start) / 2;
      		if (A.at(mid) < A.at(mid + 1))
      		{
      			start = mid;
      		}
      		if (A.at(mid) > A.at(mid + 1))
      		{
      			end = mid;
      		}
      	}
      
              return end;
      }
      
      posted @ 2021-07-25 00:21  seedoubleu  閱讀(454)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产日产欧产精品精品| 亚洲乳大丰满中文字幕| 国产美女直播亚洲一区色| 麻豆精品传媒一二三区| 乱人伦人妻精品一区二区| 日日猛噜噜狠狠扒开双腿小说| 综合图区亚洲另类偷窥| 亚洲色www永久网站| 国语偷拍视频一区二区三区| 中文字幕精品人妻丝袜| 日韩成人性视频在线观看| 熟女一区二区中文字幕| 国产精品SM捆绑调教视频| 欧洲码亚洲码的区别入口| 久操资源站| 日日摸夜夜添夜夜添国产三级| 被灌满精子的波多野结衣| 精品一区二区成人码动漫| 国内不卡不区二区三区| 毛片大全真人在线| 日韩精品无码免费专区午夜不卡| 又大又粗又硬又爽黄毛少妇| 狠狠色婷婷久久综合频道日韩 | 国产免费高清69式视频在线观看| 国产精品自拍视频免费看| 平原县| 九九热视频精选在线播放| 亚洲精品二区在线播放| 精品国产人妻一区二区三区久久 | 成人午夜免费无码视频在线观看| 欧美一区内射最近更新| 精品亚洲国产成人痴汉av| 国产丰满乱子伦无码专区| 怡红院一区二区三区在线| 国产乱老熟女乱老熟女视频| 在线观看亚洲欧美日本| 久久亚洲欧美日本精品| 天堂…中文在线最新版在线| 免费人成网站免费看视频| 亚洲中文字幕无码av永久| 国产网曝门亚洲综合在线 |