代码随想录算法训练营D1

小明 2025-05-07 22:04:02 7

D1: 为什么报这个群呢,之前一直很难坚持,我觉得还是报个群,然后大家一起写,一起打卡会坚持住。没有自制力,再没有一起写的朋友的话,真的可以躺平了-.-

()

704.Binary Search:题目还是很简单的,二分查找,属于是自己写会写,但是会有小细节漏下。重点是左闭右开还是左闭右闭。详细见下

//递归写法
class Solution {
public:
    int search(vector& nums, int target,int low,int high) {
        if(low>high) return -1;
        int mid=low+(high-low)/2;
        if(nums[mid]==target) return mid;
        if(nums[mid]>target) {
            high=mid-1;
            return search(nums, target, low, high);
        }else{
            low=mid+1;
            return search(nums, target, low, high);
        }
    }
};

递归写法,先确定确定递归函数,返回值以及参数,然后确定递归终止条件,如果是左闭右开,就要改成

()
if(low>=high) return -1;

最后是单层递归的逻辑,也就是target在哪边查哪边。

下面是迭代法:

//迭代法
class Solution {
public:
    int search(vector& nums, int target) {
        if(nums.empty()) return -1;
        
        int low=0;
        int high=nums.size()-1;
        
        while(low
            int mid=low+(high-low)/2;
            if(nums[mid]==target) return mid;
            else if(nums[mid]target){
                high=mid-1;
            }else{
                low=mid+1;
            }
        }
        return -1;
    }
};

左闭右闭写法的话,[low,high]是有效的,所以while后面是可以low public: int removeElement(vector int size = nums.size(); for (int i = 0; i

The End
微信