搜索插入位置

2021-02-01  本文已影响0人  Audience0

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 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

思路:
搜索插入值,与查找指定数字类似,所以用二分法查找
另外,插入值下标是大于或等于查找值的,所以一定要默认index为size,并且在target小于等于nums[mid]时 给index赋值

class Solution {
    public int searchInsert(int[] nums, int target) {
        int size = nums.length;
        int l = 0;
        int r = size-1;
        int index = size;
        while(l<=r){
            int mid = (l+r) >> 1;
            if(target <= nums[mid]){
                r = mid -1;
                index=mid;
            } else{
                l = mid +1;
            }

        }
    return index;
    }
}

复杂度分析

时间复杂度:O(log n)O(logn),其中 nn 为数组的长度。二分查找所需的时间复杂度为 O(log n)O(logn)。
空间复杂度:O(1)O(1)。我们只需要常数空间存放若干变量。

偷学至 力扣(LeetCode)

上一篇下一篇

猜你喜欢

热点阅读