立志重刷代码随想录60天冲冲冲!!——第一天

704. 二分查找

第一天,二分查找比较简单。需要注意开闭区间和取值范围

我全以全闭区间为例

全闭需要left <= right,且缩小范围时不包括mid

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

35.搜索插入位置

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;

        while(left <= right){
            int mid = (left + right) / 2;
            if(target < nums[mid]){
                right = mid - 1;
            }else if(target > nums[mid]){
                left = mid + 1;
            }else{
                return mid;
            }
        }
        return left;
    }
};

34. 在排序数组中查找元素的第一个和最后一个位置

今日时间太晚了,代码暂时先不写了。大致上思路就是:找到第一个target和最后一个target

第一个target:还是简单二分,然后target == nums[mid]时,再次添加right = mid - 1

最后一个target:简单二分,然后target == nums[mid]时,再次添加left = mid + 1

具体代码希望周末有时间补上!

27. 移除元素

左指针,新数组更新的位置

右指针,新数组的元素

右指针!=val的时候,左指针才会+1

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int left = 0;
        int right = 0;
        int len_nums = nums.size();

        while(right < len_nums){
            nums[left] = nums[right];
            if(nums[right] != val){
                left++;
            }
            right++;
        }
        return left;
    }
};

代码随想录更新 文章被收录于专栏

冲冲冲冲冲冲!

全部评论

相关推荐

对不起,原来不是大厂要求高,是我连进小厂都高攀了
河和静子:面试前:这厂也配让我进? 面试后:你厂也配挂我?
点赞 评论 收藏
分享
09-05 02:50
已编辑
南京理工大学 Java
大拿老师:你只要把实验室项目放第一个,就应该有面试了 但是面试通过率应该不高 现在的问题很明确,就是你的简历主项目是一个烂大街的,而你的学历在大厂又是最差的 校招简历上只有这两个东西是不一样的,一个是学校,一个是主项目 你这两个目前都是最差的,大厂又是在笔试后,面试官谁简历的时候肯定过不了
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务