easy的题,给点时间总能搞出来,速度的话就看熟悉程度了。
这题和下一道,remove target val异曲同工。有一定的迷惑性,不易直接写出来就是因为有remove的字眼。
真正对的思路其实应该是 看keep哪些元素,选择keep下来的元素是什么判断条件,这样的话思路才顺。一个scan指针,一个keep指针。
public class Solution {
public int removeDuplicates(int[] nums) {
int len=nums.length;
if(len==0) return len;
int keep=0;
for(int scan=0; scan<len; ++scan){
if(nums[keep]!=nums[scan]) nums[++keep]=nums[scan];
}
return keep+1;
}
}
把下一题的代码也贴在这,可以对比,其实思路是一样的,代码结构都一样,细微差别在于,keep的条件。
public class Solution {
public int removeElement(int[] nums, int val) {
int len=nums.length;
if(len==0) return 0;
int keep=0;
for(int scan=0; scan<len; ++scan){
if(nums[scan]!=val) nums[keep++] = nums[scan];
}
return keep;
}
}