搜尋插入位置(附二分法模板)

2021-09-27 02:23:29 字數 751 閱讀 7508

思路

我把這個題分成兩部分,第一部分是查詢是否有這個數字,因為陣列無重複,所以使用雜湊表。第二部分是,查詢這個數字應該插入的位置。

演算法先建立乙個map集合,將陣列的值作為鍵,陣列的索引作為值。當查詢不到值時,在陣列中從頭遍歷比target值大的項,找到就返回,找不到說明target是最大的,直接返回陣列總長。查詢到值直接返回。

**

class

solution

//在map中沒有找到目標值,用迴圈在有序陣列中找到第乙個大於目標值的索引

if(map.

get(target)

==null)

}return nums.length;

//找到目標值即輸出

}else

}}

思想

演算法首先判斷邊界條件,然後使用左中位數的二分查詢模板,最後得到的值一定是題解。

**

public

class

solution

int left =0;

int right = len;

//不用在每次迴圈開始單獨考慮中位數是否是目標元素,節約了時間,我們只要在退出迴圈的時候,即左右區間壓縮成乙個數(索引)的時候,去判斷這個索引表示的數是否是目標元素,而不必在二分的邏輯中單獨做判斷。

while

(left < right)

else

}return left;

}}

35 搜尋插入位置(暴力法與二分法)

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

搜尋 二分法

input 待搜尋目標整數,目標陣列 output 找到目標整數的索引,找不到則 1 constraints 目標陣列有序排列 公升降序 二分法搜尋思想 舉例說明 你是個摸牌高手,不用掀開麻將只需用手摸就能摸出牌面,桌面扣著80個麻將牌,不同的是麻將上刻的是80個1到500的公升序不連續數字,形如 ...

二分法模板

二分法基本思想 在乙個有序序列中快速查詢乙個值的位置,可以先查詢中間值,比較大小,分析該值在上半段還是下半段,然後在下乙個區間再次二分查詢,時間複雜度為 logn 二分法的應用不僅僅如此,在其他很多方面都有應用,比如acm中從 0 到 正無窮 二分答案等等。由於二分法基本思想比較簡單這裡不做過多描述...