题目

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

思路

原地移出数组的元素其实就是覆盖这个元素。
用i + count来防止i指针超出新数组的实际长度。

代码

  1. class Solution {
  2. public int removeElement(int[] nums, int val) {
  3. int count = 0;
  4. int i = 0;
  5. while (i + count < nums.length) {
  6. if (nums[i] == val) {
  7. removeOne(nums, i);
  8. count++;
  9. } else {
  10. i++;
  11. }
  12. }
  13. return nums.length - count;
  14. }
  15. public void removeOne(int[] nums, int i) {
  16. for (int k = i ; k < nums.length - 1; k++) {
  17. nums[k] = nums[k + 1];
  18. }
  19. }
  20. }