27. 移除元素

「原地移除目标元素」
双指针,right指向要处理的值,left指向要被赋值的位置
right元素不为val,则需要赋值,为val则直接跳过

  1. public int removeElement(int[] nums, int val) {
  2. int len = nums.length;
  3. int left = 0;
  4. for (int right = 0; right < len; ++right) {
  5. if (nums[right] != val) {
  6. nums[left] = nums[right];
  7. left++;
  8. }
  9. }
  10. return left;
  11. }

26. 删除有序数组中的重复项

「升序数组,删除重复元素」

  1. public int removeDuplicates(int[] nums) {
  2. int len = nums.length;
  3. if (len == 0) {
  4. return 0;
  5. }
  6. int left = 0;
  7. for (int right = 1; right < len; ++right) {
  8. if (nums[left] != nums[right]) {
  9. nums[left + 1] = nums[right];
  10. left++;
  11. }
  12. }
  13. return left + 1;
  14. }

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) {
    1. if (u < k || nums[u - k] != x) {
    2. nums[u++] = x;
    3. }
    } return u; }

```