27. 移除元素
「原地移除目标元素」
双指针,right指向要处理的值,left指向要被赋值的位置
right元素不为val,则需要赋值,为val则直接跳过
public int removeElement(int[] nums, int val) {int len = nums.length;int left = 0;for (int right = 0; right < len; ++right) {if (nums[right] != val) {nums[left] = nums[right];left++;}}return left;}
26. 删除有序数组中的重复项
「升序数组,删除重复元素」
public int removeDuplicates(int[] nums) {int len = nums.length;if (len == 0) {return 0;}int left = 0;for (int right = 1; right < len; ++right) {if (nums[left] != nums[right]) {nums[left + 1] = nums[right];left++;}}return left + 1;}
80. 删除有序数组中的重复项 II
「升序数组,删除重复元素,每个元素最多出现两次」
考虑一个通解问题,删除重复元素至最多出现k次
- 对于前k个数字,可以直接保留
- 对于后面的任意数字,能够保留的充分条件是:与当前写入位置前面的第k个元素进行比较,不相同可以保留
```java
public int removeDuplicates(int[] nums) {
return process(nums, 2); } public int process(int[] nums, int k) { int u = 0; for (int x : nums) {
} return u; }if (u < k || nums[u - k] != x) {nums[u++] = x;}
```
