【Java基础】(LeeCode第26题)删除排序数组中的重复项

tech2024-03-22  76

 第一种方法:双指针法1

public int removeDuplicates(int[] nums) { int len = nums.length; for(int i=1;i<len;i++){ if(nums[i] == nums[i-1]){ for(int j=i-1;j<len-1;j++) nums[j]=nums[j+1]; len--;//总长度减一 i--;//标记指针回退到运算位置 } } return len; }

先用一层循环找出相邻重复的数据,然后再通过数组移动位置覆盖删除重复的数据。

复杂度分析

时间复杂度:O()。

空间复杂度:O(1)。 

第二种方法:双指针2

                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; }

上面代码的思路是,使用一个慢指针与一个快指针遍历数组,如果两个指针指向的数字不同的话,将快指针的数字覆盖到慢指针的前一个位置,最后慢指针索引加一的位置就是最后不重复数组的末尾位置。

扩展1:使用通过List去除无序数组的重复数据

public static void removeDuplicates(int[] nums) { List<Integer> list = new ArrayList<Integer>(); for (int temp:nums){ if(!list.contains(temp)) list.add(temp); } System.out.print(Arrays.toString(list.toArray())); }

通过contains判断当前数组中是否含有相同数据,如果当前list中没有数组的某个数据,则将该数据插入到list中。

最新回复(0)