35 搜尋插入位置

2022-07-06 02:03:13 字數 1324 閱讀 5807

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

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

示例 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  else if (target < nums[mid])  else if (target == nums[mid]) 

} return l;

}};

二分演算法很簡單,但細節是魔鬼。

從下面幾點解釋其他版本的**與上述**的區別:

為什麼 r = n,r = n - 1 不行嗎

這是由於while迴圈體內的條件決定的,l < r就意味著搜尋區間是左閉右開區間。因此如果使r = n - 1,**會產生乙個小bug。即示例3所示,當target > nums[n - 1]時,由於搜尋區間的限制,無法返回n

所以可以在開始的地方加入判斷,即可解決此bug

if(target > nums[n - 1]) return n;
while 中的判斷條件是 \(l <= r\) 可以嗎

可以,此時搜尋區間就是左閉右閉區間。習慣來說,使用 \(l < r\) 從搜尋區間中排查元素,結束迴圈後再進行檢查。而 \(l<=r\) 則是從搜尋區間中查詢元素,遇到符合條件的直接返回。

class solution  else if (target < nums[mid])  else if (target == nums[mid]) 

} return l;

}};

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 輸入...