写在前面
今天写算法题才发现算法动图是真适合我,我空间想象力差,书面的算法能理解,等自己动手的时候不知道从何下手,没有全局观。看了双指针动图后把它记在心里,再写的时候辅以代码记忆,真就好下手了!!!
题目(力扣)
知识点
数组
没啥说的
vector
- 阅读文章: w3cschool
- 做数组题常用
- 被当做参数和返回值用时:vector 作为函数的参数或者返回值时,需要注意它的写法:
// 其中的“&”绝对不能少!!!
double Distance(vector<int>&a, vector<int>&b) {
vector<String> b;
return b;
}
- 用到的方法:
- v.size()
- v.push_back()
题解
二分查找
经典解法:二分法
心路历程:忘了算法,又复习了一遍,动手写的时候又不会写了
移除元素
双指针法:设置快慢指针,在一个for循环下完成两个for循环的工作。
存在两个不同的含义:
- 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
- 慢指针:指向更新 新数组下标的位置
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int left = 0, n = nums.size();
for (int right=0; right < n; right++) {
// nums[right]==val,快指针后移一步,将值赋给要覆盖的值
if (nums[right] != val) { // 此时同时后移
nums[left++] = nums[right];
}
}
return left;
}
};