問題描述
給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。
你可以假設陣列中無重複元素。
示例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(logn)的時間內找到是否存在目標值。但這題還多了額外的條件,即如果不存在陣列中的時候需要返回按順序插入的位置,那我們還能用二分法麼?答案是可以的,我們只需要稍作修改即可。
考慮這個插入的位置pos,它成立的條件為 :
nums[pos-1] < target <= nums[pos]
其中,nums代表排序陣列,由於如果存在這個目標值,我們返回的索引也是 pos,因此我們可以將兩個條件合併得出最後的目標:【在乙個有序陣列中找第乙個大於等於target的下標】。
問題轉化到這裡,直接套用二分法即可,即不斷用二分法逼近查詢第乙個大於等於target的下標,下文給出的**時筆者習慣的二分法寫法,ans初值設定為陣列長度可以省略邊界條件的判斷,因為存在一種情況target大於陣列中的所有數,此時需要插入到陣列長度的位置。
class
solution
else
}return ans;
}}
複雜度分析
1、時間複雜度: o(logn) ,其中,n為陣列的長度,二分查詢所需的時間複雜度為 o(logn)。
2、空間複雜度: o(1)。我們只需要常數空間存放若干變數。
LeetCode 35 搜尋插入位置
35 搜尋插入位置 給定乙個排序陣列和乙個目標值,如果在陣列中找到目標值則返回索引。如果沒有,返回到它將會被按順序插入的位置。你可以假設在陣列中無重複元素。案例 1 輸入 1,3,5,6 5 輸出 2 案例 2 輸入 1,3,5,6 2 輸出 1 案例 3 輸入 1,3,5,6 7 輸出 4 案例 ...
LeetCode 35 搜尋插入位置
題目描述 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。示例 示例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 輸出...
leetcode 35 搜尋插入位置
題目 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5輸出 2示例 2 輸入 1,3,5,6 2輸出 1示例 3 輸入 1,3,5,6 7輸出 4示例 4 輸入 1,...