二分查找之搜索插入位置

154 阅读1分钟

二分查找的前提:已排序,若无序则先排序
可以用sort()函数进行排序。
sort()函数:点击进入sort函数
思路:
设定一个left,一个right。left为初端,right为终端。再设置一个mid为中间值,用中间值和给定值比较,相同则返回mid;过小则令left=mid+1;过大则令right=mid-1。通过不断压缩最后跳出循环或找到mid值。

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

你可以假设数组中无重复元素。
示例 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

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) //vector是c++中一种容器,可看做数列
    {
        int right=nums.size()-1;//nums.size()是返回容器中元素个数值
        int left=0;
        while(left <= right)
        { 
            int mid = left + (right-left) / 2; 
            //原本是int mid = (left + right) / 2,上一写法更好; 
            if(nums[mid] == target)
            {
                return mid;
            } 
            else if(nums[mid] < target)//如果中间值偏小,将初端右移
            {
                left = mid +1 ; 
            } 
            else //中间值偏大则终端左移
            {
                right = mid -1;
            }
        }
        return left;//如果目标值target比最大值还大,最后left>right,left=nums.size()
        //如果比最小值还小,最后left值为0,因为right会先减为-1后与left交换,left=0且比right大,跳出循环且符合题意,目标值变为初端
    }
};

来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/se…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。