力扣27题
题目描述:
给你一个数组
nums
和一个值val
,你需要 原地 移除所有数值等于val
的元素。元素的顺序可能发生改变。然后返回nums
中与val
不同的元素的数量。假设
nums
中不等于val
的元素数量为k
,要通过此题,您需要执行以下操作:
- 更改
nums
数组,使nums
的前k
个元素包含不等于val
的元素。nums
的其余元素和nums
的大小并不重要。- 返回
k
。
**题解思路:**使用双指针。前面一个指针指向数组的起点,负责判断是否等于val;后面一个指针在数组的最后。 当起点的指针等于val,交换 i 和 j 位置的元素。
java
class Solution {
public int removeElement(int[] nums, int val) {
int j= nums.length-1;
for (int i = 0; i<=j;i++) {
if (nums[i]==val) {
sawp(i, j, nums);
i--;// 保证当num[j]==val的情况
j--;
}
}
return j+1;// 下标为j,个数需要+1
}
// 交换nums[]中下标为 i和 j的元素
private void sawp(int i,int j,int[] nums){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}