35 搜尋插入位置

2021-09-28 13:31:16 字數 1312 閱讀 6229

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

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

示例 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

思路分析:

如果該題目暴力解決的話需要o(n)的時間複雜度,但是如果二分的話則可以降低到o(logn)的時間複雜度;

整體思路和普通的二分查詢幾乎沒有區別,先設定左側下標left和右側下標right,再計算中間下標mid;

每次根據nums[mid]和target之間的大小進行判斷,相等則直接返回下標,nums[mid]target則right左移。這樣來縮小搜尋範圍;

查詢結束如果沒有相等值則返回left,該值為插入位置;

時間複雜度:o(logn)

二分查詢的思路不難理解,但是邊界條件容易出錯,比如迴圈結束條件中left和right的關係,更新left和right位置時要不要加1減1。

這裡我們可以拿幾個例子來測試邊界值,多試幾次就行了。

class

solution

else

if(nums[mid]

< target)

else

}return left;

}}

當然,記住二分的模板會事半功倍!煩人的邊界值也不會出錯。

模板一:

class

solution

else

if(nums[mid]

< target)

else

}// 相關返回值

return0;

}}

模板二

class

solution

else

if(nums[mid]

< target)

else

}// 相關返回值

return0;

}}

參考:

35 搜尋插入位置

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

35 搜尋插入位置

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

35 搜尋插入位置

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