先用一层循环找出相邻重复的数据,然后再通过数组移动位置覆盖删除重复的数据。
复杂度分析
时间复杂度:O()。
空间复杂度:O(1)。
for(int j=i-1;j<len-1;j++) nums[j]=nums[j+1];
通过分析,上面第一种方法的内层循环过程可以进行简化,即可将新数组在原数组的基础上通过赋值语句进行覆盖。
public static int removeDuplicates(int[] nums) { int len = nums.length; int i=0; for(int j=1;j<len;j++){ if(nums[i]!=nums[j]){ i++; nums[i] = nums[j]; } } return i+1; }上面代码的思路是,使用一个慢指针与一个快指针遍历数组,如果两个指针指向的数字不同的话,将快指针的数字覆盖到慢指针的前一个位置,最后慢指针索引加一的位置就是最后不重复数组的末尾位置。
通过contains判断当前数组中是否含有相同数据,如果当前list中没有数组的某个数据,则将该数据插入到list中。