首页 > 其他分享 >leet Code [35. Search Insert Position]

leet Code [35. Search Insert Position]

时间:2022-10-12 16:23:30浏览次数:73  
标签:Insert leet Code return target nums middle right left

[35. Search Insert Position]

(https://leetcode.cn/problems/search-insert-position/)

image-20221012155727905

  • 此题是从一个升序数组且数组内元素不重复查找目标值,因此首选二分法
  • 二分法前提:
    • 有序数组
    • 数组内元素不重复
  • 此题难点是如何确定最终结果的index
    • 若 nums[middle] == target ,直接return middle
    • 但对于大于和小于这两种情况,则需找找规律:
      • 最终没有找到target会退出循环,若target依然大于middle(也就是left和right下标对应值),则left = middle + 1,那么很显然,return left;但若target小于middle,则right = middle - 1,很显然依旧return left
    • 综上所述,在最终没有找到target退出循环,最终我们应该return的值始终是left
  • 那么题目就很简单了,也就是二分法模板 + return left
  • 代码如下:
class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int left = 0, right = nums.size() - 1;		//确定最初的查找区间
        
        //左闭右闭
        while( left <= right )
        {
            //防止溢出
            int middle = left + ( (right - left) >> 1 );
            
            if( nums[middle] == target )
            {
                return middle;
            }
            else if( nums[middle] > target )
            {
                right = middle - 1;
            }
            else
            {
                left = middle + 1;
            }
        } 
        return left;
    }
};
  • 时间复杂度:O(logn)

    空间复杂度:O(1)

标签:Insert,leet,Code,return,target,nums,middle,right,left
From: https://www.cnblogs.com/chenglixue/p/16784879.html

相关文章