搜尋插入位置

xiao满發表於2024-09-03

題目:給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。
請必須使用時間複雜度為 O(log n) 的演算法。nums 為 無重複元素 的 升序 排列陣列

解法一:左閉右閉區間。(left = 0, right = nums.length - 1)
思路:同二分法,但是需要返回未找到的插入位置,當最後一次查詢發現target < nums[mid],得出target應該插入在mid,當最後一次查詢發現target > nums[mid],得出target應該插入在mid + 1.
程式碼如下:

點選檢視程式碼
class Solution {
    public int searchInsert(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        while(left <= right) {
            int mid = (left + right) / 2;
            if(target == nums[mid]) {
                return mid;
            }else if(target < nums[mid]) {
                right = mid - 1;
            }else {
                left = mid + 1;
            }
        }
        return right + 1;
    }
}

相關文章