搜索插入位置

题目描述

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

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

示例

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

题目分析

二分搜索应用,需要注意搜索边界的处理,即一开始如果令low=0,high=n-1,则二分搜索的区间是闭区间[0,n-1],后面变换high或者low的值时也应该一直保持搜索区间是完全闭合的状态,即high=mid-1。如果令low=0,high=n,则二分搜索区间是[0,n),左闭右开,后面变换high时,应该令high=mid,一直保持左闭右开的搜索区间。

C++代码

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int n = nums.size();
        int low = 0;
        int high = n-1;
        while(low <= high){
            int mid = low + (high-low)/2;
            if (target < nums[mid]){
                high = mid-1;
            }
            else if (target > nums[mid]){
                low = mid+1;
            }
            else{
                return mid;
            }
        }
        return low;
        
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容