給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。
你可以假設陣列中無重複元素。
示例 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
看看題目發現就是個典型的二分查詢問題而已,因為存在比陣列最大值還大的情況,會返回當前不存在的索引值,這種情況注意一下就好。順便這應該是二分查詢的內容吧,但我怎麼不記得二分是不是這麼處理最大元素的呢。
class
solution
nums[middle]
> target ? right = middle : left = middle;}if
(target <= nums[left]
)else
if(target <= nums[right]
)else}}
;
int middle =
((right - left)
>>1)
+ left;
在取中值的時候,將(left + right) / 2轉變為如上的執行方式,也就是採用左移操作去代替除以2的操作。
事實上這句**是下面這句**的公升級版:
int middle =
((right + left)
>>1)
;
((right - left) >> 1) + left這個操作最好的一點是避免了right和left相加過程中的溢位問題。保證運算元不會大於right而造成溢位。
那麼最終的**如下:
class
solution
nums[middle]
> target ? right = middle : left = middle;}if
(target <= nums[left]
)else
if(target <= nums[right]
)else}}
;
每日LeetCode 搜尋插入位置
描述 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 2 輸出 1 示例 3 輸入 1,3,5,6 7 輸出 4 示例 4...
每日一題 搜尋插入位置
給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 2 輸出 1 示例 3 輸入 1,3,5,6 7 輸出 4 示例 4 輸入...
LintCode 簡單 60 搜尋插入位置
1.問題描述 給定乙個排序陣列和乙個目標值,如果在陣列中找到目標值則返回索引。如果沒有,返回到它將會被按順序插入的位置。你可以假設在陣列中無重複元素。2.樣例 1,3,5,6 5 2 1,3,5,6 2 1 1,3,5,6 7 4 1,3,5,6 0 0 3.我實現的方法,有點複雜 class so...