美文网首页刷爆力扣
【10】搜索插入位置_二分法

【10】搜索插入位置_二分法

作者: 公孙剑人 | 来源:发表于2021-01-09 21:05 被阅读0次

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/search-insert-position

    题目

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

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

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

    思路

    为了降低复杂度,我们使用二分法解决:

    1. 当target等于首个元素或最后一个元素时,直接返回结果;
    2. 当curr元素<=target时,则target位于右区间,将start往前移动到curr+1的位置,反之,将end移动到curr的位置;
    3. 当start>=end时,start即为结果。

    代码

        public int searchInsert(int[] nums, int target) {
            int start = 0;
            int end = nums.length - 1;
            if (target <= nums[start]) {
                return 0;
            }
            if (target > nums[end]) {
                return end + 1;
            }
            while (start < end) {
                int curr = (start + end) / 2;
                if (nums[curr] < target) {
                    start  = curr + 1;
                } else {
                    end = curr;
                }
    
            }
            return start;
        }
    

    结果

    执行结果

    相关文章

      网友评论

        本文标题:【10】搜索插入位置_二分法

        本文链接:https://www.haomeiwen.com/subject/gilhaktx.html