26.删除有序数组中的重复项 80.删除有序数组中的重复项 II
总结反思
这两个题目,虽然难度程度一个是简单,一个是中等,都不是特别难。但是都没有解决。 因为这两道题目都是运用双指针解决的,证明自己对双指针的掌握程度还不是很熟练。
反思:为什么没有解出来?又或者,经过一段时间之后是否能够解出来?
- 我想如果不能透彻掌握双指针,怕是还没有办法解出来
- 那么我缺少了什么?
- 没有在脑海中或者草纸上构造出完整的思路流程,耐心不足。
- 那么现在在草纸上去完善一下完整的思路流程
- 如下图
- 整个流程通过简单示例画出来之后,这样代码也变得好实现了
26.show code
class Solution {
public int removeDuplicates(int[] nums) {
int n = nums.length;
int left = 0,right = 1;
while(right < n) {
if(nums[left] != nums[right]) {
left++;
nums[left] = nums[right];
}
right++;
}
return left + 1;
}
}
80.删除有序数组中的重复项 II
- 26 题目的进阶版本,那么还是老样子,首先在草稿纸上进行演算。
- 把整个过程给过一遍,这样的话自然而然理解地更加透彻了。如下图。
- 与第 26 题不同的是,最终返回的是 left 指针的位置,不用再 +1
show code
class Solution {
public int removeDuplicates(int[] nums) {
int n = nums.length;
// 这里数组的长度如果是 1 ,那么直接返回 left 是错误的.
if(n <= 2) {
return n;
}
int left = 2,right = 2;
while(right < n) {
if(nums[left - 2] != nums[right]) {
nums[left] = nums[right];
left++;
}
right++;
}
return left;
}
}
总结反思
- 遇到题目的时候不要急
- 一定要把整体思路想透彻了,再动手
- 然后每完成一道题,要多总结,争取做到做一道透彻掌握一道