LeetCode35.搜索插入位置
  HjEoSwF3ay3Y 2023年11月02日 40 0
C++

//个人学习笔记用

  • 题目:
    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
    请必须使用时间复杂度为 O(log n) 的算法。

参考题解--代码随想录

  • 暴力解法:

    class Solution {
    public:
        int searchInsert(vector<int>& nums, int target) {
    	    for(int i  = 0; i< nums.size();i++){
        	    if (nums[i] >= target){
            	return i;
            	}
        	}
      	  return nums.size();
     }
    };
    
    //解析:他是要返回位置,所以可以不用插入数据,直接返回位置即可
    
    
  • 二分解法

    class Solution {
    public:
    	int searchInsert(vector<int>& nums, int target) {
        if(nums.empty())
        return 0;
        int left = 0;
        int right = nums.size() - 1;
        while(left <= right){
            //int middle = (left + right)/2;
            int middle = left + ((right - left)/2);  
    //左右变量一直在变化,那么要计算middle就要在循环里面定义,即随着left 、right的变化,middle也在变化
            	if(nums[middle] < target)
            	left = middle + 1;
            	else if(nums[middle] > target)
        	    right = middle -1;
    	        else
                return middle;
      	  }
          return right + 1;
    	}
    };
    
    //解析:他是要返回位置,所以可以不用插入数据,直接返回位置即可
    
    
    
    
class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        if(nums.empty())
        return 0;
        int left = 0;
        int right = nums.size() - 1;
        while(left <= right){
            //int middle = (left + right)/2;
            int middle = left + ((right - left)/2);  //左右变量一直在变化,那么要计算middle就要在循环里面定义,即随着left 、right的变化,middle也在变化
            if(nums[middle] < target)
            left = middle + 1;
            else if(nums[middle] > target)
            right = middle -1;
            else
            return middle;
        }
        return right + 1;           
    }
};



//二分查找,left、right从两侧向目标值靠拢,直到left = right,再执行一次操作,
//无论执行哪一个,那么,right 一定会小于 left,那最后的目标值,应插入到right(最小值)+1的位置

//解析:他是要返回位置,所以可以不用插入数据,直接返回位置即可
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   2024年05月01日   80   0   0 C++
  BYaHC1OPAeY4   2024年05月08日   56   0   0 C++
  yZdUbUDB8h5t   2024年05月05日   43   0   0 C++
  oXKBKZoQY2lx   2024年05月17日   57   0   0 C++
HjEoSwF3ay3Y
作者其他文章 更多