给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:
- 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
- 返回 k。
解法1: 双指针算法
public class Main {
public static void main(String[] args) {
int[] nums = new int[]{3, 2, 2, 3};
int result = removeElement(nums, 3);
System.out.println(result);
}
// 解法1:双指针算法
public static int removeElement(int[] nums, int val) {
int k = 0;
for (int i = 0 ; i < nums.length;i ++){
if(nums[i] != val)
nums[k++] = nums[i];
}
return k;
}
// 解法2: 双指针优化算法
public static int removeElement(int[] nums, int val) {
int n = nums.length;
int u = 0;
while (u < n) {
if (nums[u] == val) nums[u] = nums[n-- - 1];
else u++;
}
return u;
}
}
评论 (0)