每日一解 簡單問題 搜尋插入位置

2021-10-08 04:58:55 字數 1202 閱讀 8832

給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。

你可以假設陣列中無重複元素。

示例 1:

輸入: [1,3,5,6], 5

輸出: 2

示例 2:

輸入: [1,3,5,6], 2

輸出: 1

示例 3:

輸入: [1,3,5,6], 7

輸出: 4

示例 4:

輸入: [1,3,5,6], 0

輸出: 0

看看題目發現就是個典型的二分查詢問題而已,因為存在比陣列最大值還大的情況,會返回當前不存在的索引值,這種情況注意一下就好。順便這應該是二分查詢的內容吧,但我怎麼不記得二分是不是這麼處理最大元素的呢。

class

solution

nums[middle]

> target ? right = middle : left = middle;}if

(target <= nums[left]

)else

if(target <= nums[right]

)else}}

;

int middle =

((right - left)

>>1)

+ left;

在取中值的時候,將(left + right) / 2轉變為如上的執行方式,也就是採用左移操作去代替除以2的操作。

事實上這句**是下面這句**的公升級版:

int middle =

((right + left)

>>1)

;

((right - left) >> 1) + left這個操作最好的一點是避免了right和left相加過程中的溢位問題。保證運算元不會大於right而造成溢位。

那麼最終的**如下:

class

solution

nums[middle]

> target ? right = middle : left = middle;}if

(target <= nums[left]

)else

if(target <= nums[right]

)else}}

;

每日LeetCode 搜尋插入位置

描述 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 2 輸出 1 示例 3 輸入 1,3,5,6 7 輸出 4 示例 4...

每日一題 搜尋插入位置

給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 2 輸出 1 示例 3 輸入 1,3,5,6 7 輸出 4 示例 4 輸入...

LintCode 簡單 60 搜尋插入位置

1.問題描述 給定乙個排序陣列和乙個目標值,如果在陣列中找到目標值則返回索引。如果沒有,返回到它將會被按順序插入的位置。你可以假設在陣列中無重複元素。2.樣例 1,3,5,6 5 2 1,3,5,6 2 1 1,3,5,6 7 4 1,3,5,6 0 0 3.我實現的方法,有點複雜 class so...