一 题目
二 思路(仅解释方案1 更优解)
解析题目意思,其实就是想把所有不同的元素放在前面,
那么我们可以计数k为不同元素的数量,那么0~k-1位均不等于val,k位元素为当前需要重新设置新的不同值的下标。*
三代码:
方案1
class Solution {
public static int removeElement(int[] nums, int val) {
int k=0;
for (int i = 0; i < nums.length; i++) {
//如果不同
if (nums[i]!=val){
k++;
//前res-1位数均已安排为不同数
nums[k-1]=nums[i];
}
}
return k;
}
}
方案2
class Solution {
public int removeElement(int[] nums, int val) {
int res=0;
Queue<Integer> sameIndex=new ArrayDeque<>();
for (int i = 0; i < nums.length; i++) {
if (nums[i]==val){
sameIndex.add(i);
} else {
res++;
if (!sameIndex.isEmpty()){
nums[sameIndex.poll()]=nums[i];
sameIndex.add(i);
}
}
}
return res;
}
}