二分法查找有序数组中指定元素 c++

本文主要总结常用二分法中,查找一个有序数组中某个元素,条件如下:

1.如果在数组中找该元素,则返回该元素的位置下标

2.如果在数组中没有找到该元素,则返回应该插入的位置下标

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

using namespace std;

class Solution {
public:
    int searchInsert(vector& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;
        int mid = 0;
        while (left <= right) // 当左右两个哨兵交叉后,即left>right时终止
        {
            mid = (left + right) / 2; // 获取中间位置,如果有两个则选左边位置
            if (nums[mid] == target) // 找到目标值,直接返回
                return mid;
            else if (nums[mid] < target) // 目标值在右边段
                left = mid + 1;
            else if (nums[mid] > target) // 目标值在左边段
                right = mid - 1;
        }
        return left; // 返回左值,因为左值始终比左边一个值大比右边值小
    }
};

int main(int argc, char* argv[])
{
    vector nums = { 1,3,5,6 };
    int target = 0;
    cout << Solution{}.searchInsert(nums, target) << endl;

	return 1;
}

二分法查找有序数组中指定元素 c++_第1张图片

二分法查找有序数组中指定元素 c++_第2张图片

参考内容:

https://leetcode-cn.com/leetbook/read/array-and-string/cxqdh/

你可能感兴趣的:(二分法,Leecode,数组,位置,查找)