思路
我把這個題分成兩部分,第一部分是查詢是否有這個數字,因為陣列無重複,所以使用雜湊表。第二部分是,查詢這個數字應該插入的位置。
演算法先建立乙個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 到 正無窮 二分答案等等。由於二分法基本思想比較簡單這裡不做過多描述...