刷题打卡day1:数组理论基础,704. 二分查找,27. 移除元素

作者正在进行编程题的第三轮刷题,重点提升思路理解和代码手写能力。文中详细记录了解决704.二分查找和27.移除元素这两个问题的过程,强调了区间定义、防止溢出的计算方法以及双指针的应用。在二分查找中,注意左闭右闭区间和条件判断;在移除元素问题中,利用双指针原地修改数组。
摘要由CSDN通过智能技术生成

开始第三轮刷题,第一轮只是跟着视频学思路。第二遍看到题能知道大概什么题,但是基本写不出来。草草结束了第二遍。第二遍比较惭愧。

第三遍开始立个flag。这遍要重视思路和代码手写能力。把遇到的每个问题都弄懂!!!!

毕竟刷完这遍也就开始秋招提前批了!!!

全部手写,并且总结套路,最次要把题背下来。这遍重视质量!而不是速度!

704. 二分查找

手写的,但是还是没写出来。这次一定要把它记下来。记住:

区间左闭右闭,while小于等于!!!

class Solution {
public:
//区间左闭右闭。while小于等于
    int search(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size()-1;

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

        }
        return -1;

    }
};

27. 移除元素

最开始自己写,return了slow+1,后来才想明白。

class Solution {
public:
//数组原地移除 就是 覆盖,用后面的覆盖掉前面的。 碰到val就用后面的覆盖掉前面的。
//双指针:
    int removeElement(vector<int>& nums, int val) {
        int slow = 0;
        for(int fast = 0;fast < nums.size();fast++) {
            if(nums[fast] != val) {
                nums[slow] = nums[fast];
                slow++;
            }
            
        }
        return slow;//现在的slow就是数组大小,虽说slow从0开始的,但是最后一步时完成之后,slow还做了一次++,所以正好
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值