代碼隨想錄算法訓(xùn)練營第一天| 704. 二分查找、27. 移除元素吞杭。

704 二分查找

最重要的就是分類討論好二分盏浇,二分看著好寫邊界case還是需要測試的。大家需要注意二分的幾種情況

  • 當(dāng)l = 0, r = n的時候因為r這個值我們在數(shù)組中無法取到,while(l < r) 是正確寫法

  • 當(dāng)l = 0, r = n - 1的時候因為r這個值我們在數(shù)組中可以取到,while(l <= r) 是正確寫法 主要看能不能取到這個值

  • 二分法有多種寫法芽狗,末尾是開區(qū)間閉區(qū)間都可以解出尋找單個元素和尋找邊界的題目绢掰,只需要注意相應(yīng)的是l < r還是l <= r,每次取mid還是取mid加減一即可。建議理解后背熟一套模板,不要搞混滴劲。

  • 關(guān)于二分法和移除元素的共性思考

關(guān)于二分法和移除元素的共性思考這兩題之間有點類似的谊却,他們都是在不斷縮小 left 和 right 之間的距離,每次需要判斷的都是 left 和 right 之間的數(shù)是否滿足特定條件哑芹。對于「移除元素」這個寫法本質(zhì)上還可以理解為,我們拿 right 的元素也就是右邊的元素捕透,去填補 left 元素也就是左邊的元素的坑聪姿,坑就是 left 從左到右遍歷過程中遇到的需要刪除的數(shù),因為題目最后說超過數(shù)組長度的右邊的數(shù)可以不用理乙嘀,所以其實我們的視角是以 left 為主末购,這樣想可能更直觀一點。用填補的思想的話可能會修改元素相對位置虎谢,這個也是題目所允許的盟榴。

  • 其實二分還有很多應(yīng)用場景,有著許多變體婴噩,比如說查找第一個大于target的元素或者第一個滿足條件的元素擎场,都是一樣的,根據(jù)是否滿足題目的條件來縮小答案所在的區(qū)間几莽,這個就是二分的本質(zhì)迅办。另外需要注意,二分的使用前提:有序數(shù)組

  • 小tips:

  • 根據(jù)題目的數(shù)據(jù)量范圍選擇合適的算法章蚣,比如數(shù)據(jù)量是105站欺,那就只能使用O(nlogn)復(fù)雜度以下的算法了,使用O(n2)是會超時的纤垂;而如果數(shù)據(jù)量只有100或者1000矾策,則可以果斷的采用暴力方法(一般是O(n^2))進行求解

  • 二分的最大優(yōu)勢是在于其時間復(fù)雜度是O(logn),因此看到有序數(shù)組都要第一時間反問自己是否可以使用二分峭沦。

例題講解

左閉右閉版

二分查找.png

若要對該數(shù)組進行二分查找要注意以下兩點易錯點:

  1. while 循環(huán)變量中 left <= right贾虽。記住一定是小于等于而不是小于這是因為我們寫的是左閉右閉版 left 是可以等于 right 的。

  2. 當(dāng)比較發(fā)現(xiàn) nums[mid] 的值小于 target 的值時吼鱼, 跟新右區(qū)間的左邊界榄鉴,left = mid + 1 ! ! !而不是 left = mid 再次強調(diào)我們的區(qū)間是左閉右閉的蛉抓。我們已經(jīng)判斷出 nums[mid] 的值小于 target 了庆尘,說明 muns[mid] 一定不是我們搜索的值,接下來搜索的區(qū)間一定不包含這個數(shù)值巷送。

代碼如下:

class Solution {
    public int search(int[] nums, int target) {
        //左閉右閉
        int left = 0;
        int right = nums.length - 1;
        int mid;
        while( left <= right ){
            mid = (left + right) / 2;
            if(nums[mid] < target){
                left = mid + 1;
            }
            else if(nums[mid] > target){
                right = mid - 1;
            }
            else return mid;
        }
        return -1;
    }
}

27 移除元素數(shù)值

關(guān)鍵是要理解 fast 和 slow 指針的作用驶忌。fast 指針用來尋找新數(shù)組中需要的元素,slow 指針用來指明新數(shù)組下標(biāo)的位置。我們把 fast 指針?biāo)@取的值賦值給新數(shù)組所對應(yīng)下標(biāo)的位置付魔。

27移除元素.png

代碼如下:

class Solution {
    public int removeElement(int[] nums, int val) {
        int slow = 0;
        for(int fast = 0; fast < nums.length ; fast++){
            if(nums[fast] != val){
                nums[slow ++] = nums[fast];
            }
        }
        return slow;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末聊品,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子几苍,更是在濱河造成了極大的恐慌翻屈,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妻坝,死亡現(xiàn)場離奇詭異伸眶,居然都是意外死亡,警方通過查閱死者的電腦和手機刽宪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門厘贼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人圣拄,你說我怎么就攤上這事嘴秸。” “怎么了庇谆?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵岳掐,是天一觀的道長。 經(jīng)常有香客問我饭耳,道長岩四,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任哥攘,我火速辦了婚禮剖煌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逝淹。我一直安慰自己耕姊,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布栅葡。 她就那樣靜靜地躺著茉兰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪欣簇。 梳的紋絲不亂的頭發(fā)上规脸,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機與錄音熊咽,去河邊找鬼莫鸭。 笑死,一個胖子當(dāng)著我的面吹牛横殴,可吹牛的內(nèi)容都是我干的被因。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼梨与!你這毒婦竟也來了堕花?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤粥鞋,失蹤者是張志新(化名)和其女友劉穎缘挽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呻粹,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡壕曼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了尚猿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡楣富,死狀恐怖凿掂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纹蝴,我是刑警寧澤庄萎,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站塘安,受9級特大地震影響糠涛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兼犯,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一忍捡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧切黔,春花似錦砸脊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至诗芜,卻和暖如春瞳抓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伏恐。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工孩哑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人翠桦。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓臭笆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子愁铺,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容