给定一个数组 nums 和一个值 val,你须要原地移除全部数值等于 val 的元素,返回移除后数组的新长度。java
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。数组
元素的顺序能够改变。你不须要考虑数组中超出新长度后面的元素。spa
本题解题思路与上一篇的
删除有序数组重复元素
相似,以下所示:
可见以下图示:指针
public int removeElement(int[] nums, int val) { int i = 0, count = nums.length, j = count; while (true) { while (i < j) { if (nums[i] == val) { count--; break; } else { if (i + 1 == j) { break; } i++; } } while (j > i) { j--; if (j == i) { break; } if (nums[j] == val) { count--; } else { nums[i] = nums[j]; i++; break; } } if (i >= j) { break; } } return count; }