陣列 二分法一看就會,一寫就廢

2021-10-12 01:49:51 字數 1162 閱讀 1668

35. 搜尋插入位置

思路:

陣列有序,且不含重複元素,這就是使用二分查詢的重要前提,因為一旦有重複元素,使用二分查詢返回的元素下標並不是唯一的。

二分查詢涉及的很多的邊界條件,是 while(left < right) 還是 while(left <= right),到底是right = middle呢,還是要right = middle - 1呢?

第一種寫法:[left,right]

class

solution

else

if(nums[middle]

< target)

else

}// 分別處理如下四種情況

// 目標值在陣列所有元素之前 [0, -1]

// 目標值等於陣列中某乙個元素 return middle;

// 目標值插入陣列中的位置 [left, right],return right + 1

// 目標值在陣列所有元素之後的情況 [left, right], return right + 1

return right +1;

}};

時間複雜度:o(logn)

空間複雜度:o(1)

第二種寫法[left,right)

class

solution

else

if(nums[middle]

< target)

else

}// 分別處理如下四種情況

// 目標值在陣列所有元素之前 [0,0)

// 目標值等於陣列中某乙個元素 return middle

// 目標值插入陣列中的位置 [left, right) ,return right 即可

// 目標值在陣列所有元素之後的情況 [left, right),return right 即可

return right;}}

;

總結:

在二分查詢中,堅持迴圈不變數的原則,弄不清楚主要是因為對區間的定義沒有想清楚。

leetcode 一看就會一寫就廢的遞迴解題合集

老師,寫遞迴函式的時候,是按照偽 一步一步翻譯成 麼?這樣就行了嗎?真的是不能細想,一想就會迷惑這程式為什麼要這樣寫 笑哭 笑哭 遞迴可以看成是一種新的思維方式,必須要盡量理解,以後學資料結構會大量使用的。用 自然語言 實現 就是遞迴的魅力,習慣了這種程式設計方式就好了。給定乙個二叉樹,找出其最小深...

陣列專題 二分法

刷題重來,打算按專題開始搞,看看前輩的經驗,總結一下 二分法的判斷 如果我認為target在 left,right 裡,那麼我的判斷條件應該定為left right,如果出了我的判斷,那麼只可能會是 right在left的左邊,這時候最佳的插入位置為left或者right 1 同理如果我認為targ...

一維搜尋 二分法

二分法是用來求函式零點的方法,如果函式可導,那麼函式的一階導的零點就是原函式的極值點。但是如果原函式沒有極值點,比如乙個單調函式,其最值在某一端點。這樣求導後就不滿足二分法求零點的條件。1.二分法演算法步驟 1.二分法 maltab實現 測試函式 clc,clear f x 2 x.2 x 1 原函...