代码随想录算法训练营第一天|704.二分查找,27.移除元素

 

704.二分查找

题目链接:https://leetcode.cn/problems/binary-search/

文章讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html

这道题我一开始写的时候,直接用的暴力解法,然后AC了,后面看讲解的时候,才弄懂左闭右闭和左闭右开的区别,后面用二分法又写了一遍,但是这题的拓展题求它的左右边界那题有点没懂,建议还是要好好看看,那个左右区间还是很重要的

27.移除元素

题目链接:https://leetcode.cn/problems/remove-element/ 

文章讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html

这题我一开始想着就是用两个for循环,第一个for循环用来找元素,第二个循环用来覆盖这个元素,结果写完之后一直显示错误,后面发现i指针回退,如果遇到最后两个元素都是要删的话,它就会陷入死循环,所以我就改成了这样

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
     int n=nums.size();
     int k=0;
     for(int i=0;i<n;i++)   {
         if(nums[i]==val){
             k++;
             for(int j=i;j<n-1;j++){
                 nums[j]=nums[j+1];
             }
             nums[n-1]=-1;
             i--;
         }
     }
     return n-k;
    }
};

覆盖一次之后将最后一个元素赋特殊值-1,然后i指针回退,然后就答案正确了,后面看了代码随想录的讲解,发现双指针法真的非常巧妙,后面也是用双指针法写了一遍,感觉还是收货了很多,可以和大家一起交流学习,今天是第一天,等会我还会去把相应的拓展题全部研究一遍,我会不断前进,这是一个新的开始!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值