給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。
你可以假設陣列中無重複元素。
示例 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(n) 的時間複雜度,但是如果二分的話則可以降低到 o(logn) 的時間複雜度
整體思路和普通的二分查詢幾乎沒有區別,先設定左側下標 left 和右側下標 right,再計算中間下標 mid
每次根據 nums[mid] 和 target 之間的大小進行判斷,相等則直接返回下標,nums[mid] < target 則 left 右移,nums[mid] > target 則 right 左移
查詢結束如果沒有相等值則返回 left,該值為插入位置
時間複雜度:o(logn)
二分查詢的思路不難理解,但是邊界條件容易出錯,比如 迴圈結束條件中 left 和 right 的關係,更新 left 和 right 位置時要不要加 1 減 1。
class
solution
else
if(nums[mid]
else
if(nums[mid]
>target)
}return left;
}}
搜尋插入位置
給定乙個排序陣列和乙個目標值,如果在陣列中找到目標值則返回索引。如果沒有,返回到它將會被按順序插入的位置。你可以假設在陣列中無重複元素。二分搜尋法 如果找不到該數,high是比該數小的那個數的下標,而low是比該數大的那個數的下標。public class solution param a an i...
搜尋插入位置
給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 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...
搜尋插入位置
給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 直接用二分法,注意left和right的更新方式,在while中只用返回mid,if else中更新lef...