力扣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;
}
}
**题解思路:**使用双指针。前面一个指针指向数组的起点,负责判断是否等于val;后面一个指针在数组的最后。