ps:本文章仅用来记录日常学习的所思所想,各位看到可取之处也可纳为己用,说的不对的地方还请多多指教。
1.题目做法
删除有序数组中的重复项
题目描述:
2.题目分析
这道题跟上次做的移除元素非常相似,无非就是判断条件的不同。根据之前做的经验,我立马想到继续用双指针的方法做如下:
class Solution {
public int removeDuplicates(int[] nums) {
int n = nums.length;
int back = 1;
int font = 1;
while(back < n){
if(nums[back] != nums[back-1]){
nums[font] = nums[back];
font++;
}
back++;
}
return font;
}
}
要注意的点是抓住题目给的关键信息,nums是一个有序的数组,有序说明什么?说明重复的元素肯定都黏在一起,所以我们不需要想得太复杂,只需要设定一个在前面的指针负责记录新数组的长度(这不是跟上一题一样吗hhh),一个在后面的指针负责抓坏人(非重复的元素,严谨地说是具有唯一性的值)。
while(back < n){
if(nums[back] != nums[back-1]){
nums[font] = nums[back];
font++;
}
back++;
}
关键代码部分,跟上次做的不一样的点首先是这次用了while循环,当然想用for循环也可以,我只是想来点不一样的。其次就是最最关键的判断部分,只有当后面指针所指的值不等于它前一个值才赋值给前面指针所指的值(重复的值都会留在原地不管了),并且前面指针加1(也就是新数组的长度加1),但是后面的指针一直在往前跑抓坏人以此达到形成新数组。
3.总结
这道题的关键就是抓住nums是个有序数组并且可以想到重复元素都放在一起。其他的就是码字把自己的想法码出来了