LeetCode 35 搜尋插入位置

2021-10-08 17:55:00 字數 1079 閱讀 2858

問題描述

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

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

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