力扣 题目35-- 搜索插入位置

题目


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

请必须使用时间复杂度为 O(log n) 的算法。

 

示例 1:

    输入: nums = [1,3,5,6], target = 5
    输出: 2

示例 2:

    输入: nums = [1,3,5,6], target = 2
    输出: 1

示例 3:

    输入: nums = [1,3,5,6], target = 7
    输出: 4

题解


二分搜索改一下返回就完了

还是讲讲二分搜索吧

一开始

因为7>5所以只取5的右边 left=middle+1;更新middle=(left+right)/2+left

 

9和7不满足 9>7所以right=middle-1;

7=7找到 返回位置

重点来了 如果找不到呢 7<8所以left=middle+1; ?正好是我们要找到的位置 所以输出left即可

代码


 

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 int ersearch(vector<int>& nums, int target, int left, int right)
 5 {
 6     while (left <= right) {
 7         int middle = left + ((right - left) / 2);
 8         if (nums[middle] > target) {
 9             right = middle - 1;
10         }
11         else if (nums[middle] < target) {
12             left = middle + 1;
13         }
14         else {
15             return middle;
16         }
17     }
18     return left;
19 }
20 class Solution {
21 public:
22     int searchInsert(vector<int>& nums, int target) {
23         return ersearch(nums, target, 0, nums.size()-1);
24     }
25 };
26 
27 int main() {
28     vector<int>nums = { 1 };
29     int target = 5;
30     Solution sol;
31     int res=sol.searchInsert(nums, target);
32     cout << res << endl;
33 }
View Code

 

posted @ 2022-04-25 13:32  无聊的阿库娅  阅读(41)  评论(0)    收藏  举报