开始第三轮刷题,第一轮只是跟着视频学思路。第二遍看到题能知道大概什么题,但是基本写不出来。草草结束了第二遍。第二遍比较惭愧。
第三遍开始立个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还做了一次++,所以正好
}
};