思路 - O(n^2)
和删除数组中某一项的思路相似。
class Solution {public int removeDuplicates(int[] nums) {int i = 0;int count = 0;while (i + count < nums.length - 1) {if (nums[i] == nums[i + 1]) {removeOne(nums, i + 1);count++;} else {i++;}}return nums.length - count;}public void removeOne(int[] nums, int i) {for (int k = i; k < nums.length - 1; k++) {nums[k] = nums[k + 1];}}}
思路 - O(n)
双指针
i 表示待填充的位置
j 表示可以填充到i的值
j 走完 nums.length 代表没有可以填充的值,返回。
代码
class Solution {public int removeDuplicates(int[] nums) {int i = 0;int j = 1;while (j < nums.length) {if (nums[i] != nums[j]) {i++;nums[i] = nums[j];}j++;}return i + 1;}}
