LeetCode刷题之搜索插入位置(c++)

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

请必须使用时间复杂度为 O(log n) 的算法。
2. 思路:
因为这是一个有序的数组,首先想到的就是二分法,并且里面没有重复的元素,这样用二分查找返回的值就是一个固定的数
3. 代码:

class Solution {
    
    
public:
    int searchInsert(vector<int>& nums, int target) {
    
    
        int left = 0;
        int length = nums.size();
        if(length == 0){
    
    
            return 0;
        }

        int right = length - 1 ;

        while(left <= right){
    
    
            int mid = (right + left) / 2;
            if(nums[mid] == target){
    
    
                return mid; 
            }
            if(nums[mid] > target ){
    
    
                right = mid - 1;
            }
            if(nums[mid] < target){
    
    
                left = mid + 1;
            }
        }
        return right + 1;
    }
};
  1. tips:
    在C++中sizeof计算map或者vector的大小的时候,无论容器里面有多少元素,返回的都是固定值,这个固定值就是C++中map或者vector这个数据结构本身所占用的空间。

对于vector来说,上文实测占用24字节,分成3个8字节的ptr,分别表示vector中首个元素的地址,下一个待插入的地址和后续扩展地址(当下一个地址达到后续扩展时,容器会自动再申请一段空间)。
vector 的长度最好使用 nums.size() 来获得。

猜你喜欢

转载自blog.csdn.net/qq_43964318/article/details/121312919
今日推荐