精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

尋找旋轉數組中的最小數字

開發 前端
把一個數組最開始的若干個元素搬到數組的末尾,就稱之為數組的旋轉。有一個遞增排序數組,將其開頭的若干個元素移動至數組的末尾,尋找其中的最小值。

[[409450]]

本文轉載自微信公眾號「神奇的程序員K」,作者神奇的程序員K。轉載本文請聯系神奇的程序員K公眾號。

前言

把一個數組最開始的若干個元素搬到數組的末尾,就稱之為數組的旋轉。有一個遞增排序數組,將其開頭的若干個元素移動至數組的末尾,尋找其中的最小值。

本文就跟大家分享下如何用最快的速度找到遞增旋轉數組中的最小值,歡迎各位感興趣的開發者閱讀本文。

實現思路

乍一看這個問題,一部分開發者首先想到的解法就是從頭到尾遍歷下數組,這樣就能找出最小的元素。這種思路的時間復雜度是O(n),沒有將題目中的條件利用起來,因此這種方案不是本題的正確答案。

舉例分析

接下來,我們來分析下題目,通過舉例、觀察來尋找突破口。我們先來列舉一個遞增數組。

如上圖所示,我們準備了一個1 ~ 5的遞增數組,然后將其開頭的兩個元素搬到了數組的末尾,這樣就構成了一個旋轉數組。

經過一番觀察后,我們可以發現:

  • 旋轉后的數組可以劃分為兩個已經排序的小數組
  • 前面子數組的元素都大于等于后面子數組的元素
  • 最小的數字是這兩個子數組的分界線

二分查找

經過上面的分析,我們可知旋轉后的數組在一定程度上是排好序的,因此我們可以嘗試使用二分查找的思路來尋找最小的元素。

接下來,我們準備兩個指針(左指針、右指針),左指針指向數組的第一個元素,右指針指向數組的末尾元素,如下圖所示:

觀察上圖后,我們發現它們的中間元素是5、最小值在5的后面,因此我們就可以排除中間值之前的元素了,移動左指針至5,如下圖所示:

此時,它們的中間元素是1,我們發現最小值2的前面,因此我們就可以將右指針移動至中間1,如下所所示:圖片

最后,我們發現左指針與右指針相鄰,右指針指向的元素正好是旋轉數組的最小元素。

經過上述畫圖分析后,我們可以得到如下規律:

  • 如果兩個指針的中間元素大于等于左指針指向的元素,那么最小值一定在中間元素的后面,移動左指針至中間值位置縮小查找范圍
  • 如果兩個指針的中間元素小于等于右指針指向的元素,那么最小值一定在中間元素的前面,移動右指針至中間值位置縮小查找范圍
  • 左指針一定指向前面的遞增子數組,右指針一定指向后面的遞增子數組
  • 當左、右指針相鄰時,右指針所指向的元素就是這個數組的最小值

時間復雜度分析:每次移動指針,查找范圍都會縮小到原先的一半,因此總的時間復雜度為O(logn)

特殊情況

上述規律可以滿足大多數情況,當出現下述情況時我們就不能采用二分查找了:

  • 當數組的0號元素小于最后一個元素時,證明這個數組是排好序的,它的最小值是數組的第0號元素
  • 當左指針與右指針指向的元素相同且它們的中間元素也與其相同,那么就只能使用順序查找,如下圖所示:

實現代碼

接下來,我們根據上述所講內容來總結下思路:

  • 判斷數組是否已經排好序(第一個元素是否小于最后一個元素)
  • 左指針指向的值大于等于右指針指向的值就根據條件移動左、右指針:
    • 循環終止條件:左指針與右指針相鄰
    • 求左、右指針的中間索引
    • 左指針指向的值與右指針指向的值相同且中間元素也與之相同(使用順序查找 )
    • 中間值大于等于左指針指向的值,移動左指針位置至中間值位置
    • 中間值小于等于右指針指向的值,移動右指針位置至中間值位置
  • 循環結束,返回最小值

代碼如下所示:

  1. // 把一個數組最開始的若干個元素搬到數組的末尾,我們稱之為數組的旋轉。 
  2. // 輸入一個遞增排序的數組的一個旋轉,輸出旋轉數組的最小元素。 
  3. // 例如,數組[3,4,5,1,2]為[1,2,3,4,5]的一個旋轉,該數組的最小值為1。 
  4.  
  5. export default class FindWhirlingArrayMinVal { 
  6.   private leftPointer; 
  7.   private rightPointer; 
  8.   private middleIndex; 
  9.  
  10.   constructor() { 
  11.     this.leftPointer = 0; 
  12.     this.rightPointer = 0; 
  13.     this.middleIndex = 0; 
  14.   } 
  15.  
  16.   public getMinValue(incrementArray: Array<number>): number { 
  17.     this.rightPointer = incrementArray.length - 1; 
  18.     // 第一個元素小于最后一個元素,證明數組是排好序的 
  19.     if (incrementArray[this.leftPointer] < incrementArray[this.rightPointer]) { 
  20.       // 其最小值為第一個元素 
  21.       return incrementArray[this.leftPointer]; 
  22.     } 
  23.     while ( 
  24.       incrementArray[this.leftPointer] >= incrementArray[this.rightPointer] 
  25.     ) { 
  26.       // 循環終止條件: 右指針與左指針相鄰,最小值為右指針所指向的值 
  27.       if (this.rightPointer - this.leftPointer === 1) { 
  28.         this.middleIndex = this.rightPointer; 
  29.         break; 
  30.       } 
  31.       // 求中間值 
  32.       this.middleIndex = Math.floor((this.leftPointer + this.rightPointer) / 2); 
  33.       // 左指針指向的值與右指針指向的值相同且中間元素也與之相同 
  34.       // 則無法使用二分查找,需要順序查找 
  35.       if ( 
  36.         incrementArray[this.leftPointer] === 
  37.           incrementArray[this.rightPointer] && 
  38.         incrementArray[this.middleIndex] === incrementArray[this.leftPointer] 
  39.       ) { 
  40.         // 按順序查找 
  41.         let minValue = incrementArray[0]; 
  42.         for (let i = 0; i < incrementArray.length; i++) { 
  43.           if (incrementArray[i] < minValue) { 
  44.             minValue = incrementArray[i]; 
  45.           } 
  46.         } 
  47.         return minValue; 
  48.       } 
  49.  
  50.       if ( 
  51.         incrementArray[this.middleIndex] >= incrementArray[this.leftPointer] 
  52.       ) { 
  53.         // 中間值大于等于左指針指向的值 
  54.         // 移動左指針至中間值位置 
  55.         this.leftPointer = this.middleIndex; 
  56.       } else if ( 
  57.         incrementArray[this.middleIndex] <= incrementArray[this.rightPointer] 
  58.       ) { 
  59.         // 中間值小于等于右指針指向的值 
  60.         // 移動右指針至中間值位置 
  61.         this.rightPointer = this.middleIndex; 
  62.       } 
  63.     } 
  64.     // 循環結束,返回最小值 
  65.     return incrementArray[this.middleIndex]; 
  66.   } 

完整代碼請移步:findWhirlingArrayMinVal-test.ts

 

責任編輯:武曉燕 來源: 神奇的程序員K
相關推薦

2021-01-22 08:30:50

LeetCode數字數組

2022-05-27 13:45:38

區塊鏈數字鴻溝安全

2024-02-23 10:31:27

邊緣計算數字鴻溝XGAIN項目

2023-07-18 12:37:58

2021-01-14 08:23:15

LeetCode變量

2017-10-26 10:03:36

數據中心數字群集

2021-07-14 06:40:02

矩陣路徑字符串

2018-01-14 23:14:13

戴爾

2021-10-14 11:31:28

數組面試題中心下標

2012-08-10 09:59:47

2011-02-17 09:58:16

WindowsUbuntu

2021-07-05 06:39:59

經典算法無序數組

2017-05-22 10:54:56

深度學習CNNMNIST

2019-12-26 13:06:07

Windows 10旋轉屏幕Windows

2017-11-13 09:38:30

數字化CIO轉型

2020-05-18 14:25:41

頻譜5G運營商

2009-11-25 09:13:41

PHP數組轉字符串PHP字符串轉數組

2014-10-13 17:04:28

IT運維管理

2022-02-18 10:34:58

自動駕駛

2017-12-26 14:27:24

點贊
收藏

51CTO技術棧公眾號

免费一级在线观看| 亚洲天堂2024| 美女黄视频在线观看| 国产精选一区二区三区| 午夜精品久久久久久久男人的天堂 | 日本韩国一区二区三区视频| 一区二区三区av在线| 亚洲风情第一页| 日韩和欧美一区二区| 精品少妇v888av| 亚欧洲乱码视频| 奇米一区二区| 欧美性色综合网| 激情五月宗合网| 黄色网址免费在线观看| 91亚洲大成网污www| 国产一区私人高清影院| 依依成人综合网| 久久久久久久久久久9不雅视频| 亚洲黄页网在线观看| 夜夜夜夜夜夜操| 三级成人黄色影院| 亚洲国产一区二区在线播放| 亚洲精品久久区二区三区蜜桃臀| 日韩有码第一页| 国产一区二区三区在线观看免费 | 特一级黄色录像| 99久久国产免费| 日韩国产欧美在线播放| 国产69精品久久久| 手机在线免费看片| 大片网站久久| 亚洲片国产一区一级在线观看| 精品人妻一区二区三| 国产原创一区| 色综合色狠狠天天综合色| 激情五月婷婷六月| 最新av在线播放| 国产精品人妖ts系列视频 | 天美av一区二区三区久久| 精品美女在线观看| 国产又黄又嫩又滑又白| 国产一精品一av一免费爽爽| 欧美久久久久中文字幕| 男女污污的视频| 欧美粗大gay| 精品国产91久久久久久| 久操手机在线视频| 91在线中字| 日韩毛片一二三区| 亚洲精品久久久久久一区二区| 国产乱理伦片a级在线观看| www精品美女久久久tv| 国内精品视频免费| 水中色av综合| 久久综合狠狠综合| 久久青青草原| 黄色在线小视频| 久久久久久毛片| 日本不卡一区二区三区在线观看 | 日韩人妻精品无码一区二区三区| 草草在线观看| 欧美日韩美女在线| 午夜精品久久久久久久无码| 亚洲女同av| 欧美视频一区二区| 国产美女视频免费看| 国产视频一区二| 精品福利在线导航| 国产制服丝袜在线| 精品国产一区二区三区噜噜噜| 国产一区二区激情| 成年人视频软件| 欧美1区免费| 国模精品视频一区二区| 黄色在线免费观看| 免费人成在线不卡| 亚洲一区中文字幕| 四虎在线免费看| 亚洲国产精品成人综合色在线婷婷| 在线观看福利一区| 丝袜综合欧美| 色婷婷精品大视频在线蜜桃视频| 久久久久久三级| 免费观看在线一区二区三区| 亚洲成avwww人| 一色道久久88加勒比一| 婷婷六月综合| 99久久亚洲精品蜜臀| 96视频在线观看欧美| 亚洲欧美日韩系列| 激情伊人五月天| av成人亚洲| 日韩欧美一级在线播放| 亚洲国产欧美视频| 久久久久久久久久久久久久久久久久| 久久综合99re88久久爱| 国产欧美在线看| 国产小视频一区| 亚洲国产精品t66y| 国产色一区二区三区| 国产69精品久久久久按摩| 欧美精品一区二区三区高清aⅴ | 岛国av一区二区在线在线观看| 色综合手机在线| 国产精品毛片视频| 日日狠狠久久偷偷四色综合免费| 五月天婷婷丁香| 久久99国内精品| 久久综合九色综合久99| 中文字幕中文字幕在线十八区| 色欧美片视频在线观看| 成年女人免费视频| 日韩欧美中文| 欧美性做爰毛片| 亚洲精品18在线观看| 中文字幕欧美激情| aa在线免费观看| 日本高清精品| 日韩中文在线视频| 无码无套少妇毛多18pxxxx| 高清不卡一区二区在线| 在线视频91| 在线日本欧美| 亚洲精品自产拍| 国产一级在线观看视频| 国产在线一区二区综合免费视频| 日韩欧美亚洲日产国产| 九色porny自拍视频在线观看 | 日本电影一区二区在线观看| 亚洲国产cao| 又黄又爽又色的视频| 香蕉国产精品| 国产日韩av在线播放| 国产精品ⅴa有声小说| 欧美午夜性色大片在线观看| 成年人的黄色片| 亚洲国产日本| 国产精品对白一区二区三区| 日本高清成人vr专区| 7777精品伊人久久久大香线蕉经典版下载 | 国产xxxxxx| 亚洲人成7777| 久久综合在线观看| 仙踪林久久久久久久999| 国产一区在线播放| 人人干在线视频| 欧美乱熟臀69xxxxxx| 特黄一区二区三区| 精品一二三四区| 激情图片qvod| 国产一区2区在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 91精品国产综合久| 亚洲欧美国产三级| 国产裸体视频网站| 一区二区亚洲精品| 久久精品99久久| 日本美女一区| 中文字幕在线精品| 国产成人麻豆精品午夜在线| 一区二区三区视频在线看| 久久久久国产免费| 国产欧美在线| 日本一区二区精品视频| 久久av影院| 理论片在线不卡免费观看| 性生活视频软件| 精品人伦一区二区三区蜜桃免费| 无码人妻精品一区二区三应用大全| 久久精品毛片| 亚洲永久激情精品| 午夜久久av| 欧美一级在线亚洲天堂| 91成人高清| 日韩你懂的在线观看| 日韩精品乱码久久久久久| 国产午夜精品一区二区三区四区| 精品久久久99| 国产视频一区二区视频| 性欧美freesex顶级少妇| 亚洲性av网站| 国产av无码专区亚洲av| 精品av在线播放| 天天操天天干天天操天天干| 国产美女在线精品| 两根大肉大捧一进一出好爽视频| 欧美一二区在线观看| 91av免费看| 老司机2019福利精品视频导航 | 国产人成网在线播放va免费| 精品av久久707| 伊人22222| 亚洲成人自拍一区| 欧美人与禽zoz0善交| 成人天堂资源www在线| 91激情视频在线| 欧美精品偷拍| 亚洲欧美成人一区| 精品国产乱子伦一区二区| 国产精品一区二区3区| 国产理论电影在线 | 2021天堂中文幕一二区在线观| 亚洲图片欧美日产| 亚洲黄色一级大片| 欧美日韩免费视频| 亚洲免费在线视频观看| 亚洲在线成人精品| 天天色天天综合| 久久久久久久久久电影| 欧美激情 亚洲| 国内精品视频一区二区三区八戒 | 国产一区二区三区综合| 亚欧在线免费观看| 夜夜精品视频| 喜爱夜蒲2在线| 日韩精品免费| 日本一区二区精品| 亚洲精品蜜桃乱晃| 国产精品久久久一区二区三区| 免费视频观看成人| 国产精品成熟老女人| 午夜影院在线播放| 韩国精品久久久999| 色婷婷在线播放| 日韩在线观看免费| h网站在线免费观看| 亚洲久久久久久久久久| 婷婷五月综合激情| 亚洲国产成人爱av在线播放| www.亚洲欧美| 欧美一区二区免费视频| 国产精品久久无码一三区| 欧美日韩国产成人在线91| 亚洲图片欧美日韩| 欧美日韩亚洲精品一区二区三区| 日本午夜小视频| 亚洲成人av电影| 日韩精品无码一区二区| 精品福利一区二区| 在线观看 中文字幕| 亚洲成va人在线观看| 黄色激情视频在线观看| 亚洲尤物在线视频观看| 国产精品第72页| 亚洲综合免费观看高清在线观看| 久久久久久蜜桃| 一级做a爱片久久| 久久无码精品丰满人妻| 亚洲国产精品自拍| 一级免费在线观看| 色综合一区二区| 亚洲av无码不卡| 欧美视频在线一区| 国产伦精品一区二区三区免.费| 在线成人av影院| 国产日韩免费视频| 精品欧美一区二区三区精品久久 | 国产精品白丝久久av网站| 91午夜在线播放| 伊人久久亚洲| 久久艳妇乳肉豪妇荡乳av| 欧美美女在线| 一区二区精品国产| 欧美久久一级| 国产午夜伦鲁鲁| 男女性色大片免费观看一区二区| 三上悠亚av一区二区三区| 国产一区高清在线| 欧美夫妇交换xxx| 久久久噜噜噜久久中文字幕色伊伊 | 91视频最新入口| 日本不卡在线视频| 午夜xxxxx| 成人av电影在线播放| 在线免费观看麻豆| 中文字幕视频一区二区三区久| 午夜国产福利一区二区| 欧美午夜精品久久久久久人妖| 瑟瑟视频在线免费观看| 欧美一区二区三区性视频| 日本波多野结衣在线| 在线视频精品一| 视频在线这里都是精品| 青青青国产精品一区二区| 国产精品日本一区二区三区在线 | 91久色国产| 亚洲美女15p| 天天干天天色天天爽| av不卡在线看| theporn国产精品| 97超碰欧美中文字幕| 中日韩一级黄色片| 富二代精品短视频| 国产成人三级在线播放| 日韩激情av在线播放| 哥也色在线视频| 欧洲成人性视频| 亚洲视频国产精品| 视频在线99| 一本久道久久综合狠狠爱| 亚洲一二三av| 久久久国产一区二区三区四区小说| 私库av在线播放| 欧洲亚洲精品在线| 天堂在线视频网站| 久久成人亚洲精品| 亚洲一区二区三区四区| 国产伦精品一区二区三区视频免费| 欧美电影《轻佻寡妇》| 久久精品99国产| www.在线成人| 久久久精品人妻一区二区三区四 | 黄色成人在线播放| 国产农村老头老太视频| 在线观看国产精品日韩av| 女厕盗摄一区二区三区| 国产精品国色综合久久| 亚洲欧美综合久久久| 丰满少妇在线观看| caoporn国产精品| 久久久久97国产| 欧美剧情片在线观看| 成年人视频在线看| 日韩av成人在线观看| 欧美18xxxx| 免费看一级大黄情大片| 99久久国产综合精品女不卡 | 日本电影亚洲天堂一区| 午夜在线观看视频18| 久久久久久国产精品| www一区二区三区| 在线观看成人av电影| 九一九一国产精品| 青青青视频在线播放| 在线亚洲一区二区| 国产高清视频在线观看| 国产第一区电影| 欧美色图国产精品| 久久久久久久片| 国产日产精品1区| 91在线视频免费播放| 亚洲日韩欧美视频一区| 国产一区二区三区影视| 日韩欧美第二区在线观看| 三级成人在线视频| 亚洲一区二区三区香蕉| 欧美三级 欧美一级| 日韩美女毛片| 日韩成人av在线播放| 国产精品成人无码专区| 99精品女人在线观看免费视频| 91文字幕巨乱亚洲香蕉| 国产一区日韩欧美| av av在线| 欧美日韩国产精品一区二区三区四区 | 天天干天天操天天爱| 亚洲欧美国产精品va在线观看| 亚洲女同志freevdieo| 日韩欧美一区二区三区四区五区 | 国产一二区在线| 91视频在线免费观看| av福利在线导航| 性欧美大战久久久久久久久| 一区不卡在线观看| 欧美大尺度在线观看| 国产精品tv| 国产激情在线观看视频| 亚洲欧美在线高清| 亚洲欧美另类综合| 欧美最猛性xxxx| 婷婷色综合网| 波多野结衣影院| 欧美性受xxxx| 免费在线观看av电影| 久久99九九| 久久精品国产999大香线蕉| 精品99在线观看| 精品视频在线观看日韩| 久久亚洲人体| 国产精品三级一区二区| 久久久午夜精品| av中文字幕第一页| 2019亚洲日韩新视频| 天天做天天爱天天综合网2021 | 波多野结衣在线观看一区| 久久精品视频一| 久久成人福利| 五月婷婷六月丁香激情| 亚洲一卡二卡三卡四卡无卡久久| 青青视频在线观| 亚洲曰本av电影| 午夜在线播放视频欧美| 国产美女网站视频| 日韩精品999| 精品久久免费| www黄色在线| 亚洲午夜久久久久久久久电影院 | 欧美亚洲第一页| 一区二区在线影院|