2/7 算法每日N题(二分+双指针)

慈云数据 2024-03-13 技术支持 85 0

第一题:

class Solution {
public:
    int search(vector& nums, int target) {
        int left = 0, right = nums.size() - 1;
        while(left  target) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return -1;
    }
};

第一题没什么细节,用笔在纸上画一下模拟一下即可

第二题:

这一道题相对其他题比较抽象,具体体现在其最后一个位置不好找,因为在编译的时候,计算mid时系统会自动向下取整,因此在处理左端点时可以向下取整得到,处理又端点时需要向上取整,同时要注意数据的溢出,这里是如何处理的。

class Solution {
public:
    vector searchRange(vector& nums, int target)
    {
        if (nums.size() == 0) return{ -1,-1 };
        int begin = 0;
        int left = 0, right = nums.size() - 1, mid;
        while (left 的目的是,使得right所指向的目标元素为最后的位置。 
 

第三题:

class Solution {
public:
    int searchInsert(vector& nums, int target) {
        int n = nums.size();
        int l=0,r=n-1;
        while(l arr[i + 1])
				return i;
		// 为了处理 oj 需要控制所有路径都有返回值
		return -1;
	}
}
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon