1. 程式人生 > 其它 >35搜尋插入位置

35搜尋插入位置

一、題目

給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。

請必須使用時間複雜度為 O(log n) 的演算法。

示例 1:

輸入: nums = [1,3,5,6], target = 5
輸出: 2
示例 2:

輸入: nums = [1,3,5,6], target = 2
輸出: 1
示例 3:

輸入: nums = [1,3,5,6], target = 7
輸出: 4
示例 4:

輸入: nums = [1,3,5,6], target = 0
輸出: 0
示例 5:

輸入: nums = [1], target = 0
輸出: 0
   
提示:

1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums 為無重複元素的升序排列陣列
-104 <= target <= 104

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/search-insert-position
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

二、解題

目標:

1、查詢元素,在排序陣列中,要求O(logn)時間,可以選擇二分查詢

2、若查詢失敗,按陣列順序插入目標元素,插入位置在low處。

三、程式碼

class Solution {
    public int searchInsert(int[] nums, int target) {
        int low = 0;
        int high = nums.length - 1;
        while(low <= high) {
            //  找到目標值
            int mid = low + (high - low) / 2;
            if (nums[mid] == target) {
                return mid;
            }
            //  未找到目標值查詢插入位置
            if (nums[mid] > target) {
                high = mid - 1;
            } else {
                low = mid + 1;
            }
        }
        return low;
    }
}

四、截圖