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指针回退,然后就答案正确了,后面看了代码随想录的讲解,发现双指针法真的非常巧妙,后面也是用双指针法写了一遍,感觉还是收货了很多,可以和大家一起交流学习,今天是第一天,等会我还会去把相应的拓展题全部研究一遍,我会不断前进,这是一个新的开始!