leetcode 35 搜尋插入的位置

2021-10-10 12:06:21 字數 1571 閱讀 7190

題目:

分析:

因為是乙個有序陣列,先找到中間位置,(注意,如果是偶數,中間位置選用左邊的),然後用中間位置的值和目標值進行比較,如果比目標值大,就在數 組中間值左半部分找,反之,進在右半部分找;如果和目標值相等,就返回下標,直到指向右邊位置的指標(low)大於指向左面位置的指標(high),就結束 (說 明陣列裡面沒有和目標值相同的值);這就會出現三種情況:目標值比陣列的最大值大,這時low的值大於陣列的長度-1;目標值比陣列的最小值小, 這 時high比0小;目標值位於陣列中兩個元素中間,這時low的範圍在【0,len-1】之間,low的位置就是插入的位置。

即歸結為四種情況:

步驟:

1、定義兩個變數分別指向陣列的左右兩個端點(用於表示查詢的範圍)

2、如果右端點小於等於左端點,就執行迴圈體

3、計算陣列的中點值的下標,如果中間值比目標值小,則右端點等於中間值的下標+1;如果中間值比目標值大,則將左端點的值等於中間值的下標-1;否則,就 返 回(中間值和目標值相等),就返回下標

4、如果執行完迴圈體沒有找到中間值和目標值相等的下標,則low>high;如果右下標比陣列的最後一位元素的下標大(目標值比陣列的最大的值大),則返回數 組 的最後一位元素的下標+1(陣列的長度);如果左端點比0小(目標值比陣列0號位置的數小),則返回陣列的0號位置;否則(目標值在陣列的兩個元素之 間),給返回low;

class

solution

else

if(nums[midaum]

> target)

else}if

(low>len-1)

else

if(high<0)

else}}

;

分析:

}while(left < right) 這種寫法表示在迴圈體內部排除元素;

退出迴圈的時候 left 和 right 重合,區間 [left, right] 只剩下成 1 個元 素,退出迴圈,這個元素 有可能

就是我們要找的元素。

採用左閉右閉的區間

int

searchinsert

(vector<

int>

&nums,

int target)

// 特判

if(nums[size -1]

< target)

int left =0;

int right = size -1;

while

(left < right)

else

}return left;

}

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