删除有序数组中的重复项 II
解法一:数组遍历
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class LeetCode_080 {
public static int removeDuplicates(int[] nums) {
if (nums.length == 1 || nums.length == 2) {
return nums.length;
}
List<Integer> twiceNums = new ArrayList<>();
Set<Integer> onceNums = new HashSet<>();
onceNums.add(nums[0]);
int result = nums.length;
for (int i = 1; i < result; ) {
if (twiceNums.contains(nums[i])) {
for (int j = i + 1; j < result; j++) {
swap(nums, j - 1, j);
}
result--;
continue;
}
if (onceNums.contains(nums[i])) {
twiceNums.add(nums[i]);
} else {
onceNums.add(nums[i]);
}
i++;
}
return result;
}
public static void swap(int[] nums, int left, int right) {
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
public static void main(String[] args) {
int[] nums = new int[]{0, 0, 1, 1, 1, 1, 2, 3, 3};
System.out.println(removeDuplicates(nums));
}
}