27.移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 k

思路:

快慢指针,快指针遍历元素,慢指针依次指向和val值相等的元素;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package com.wereash.scut_hot100;

import java.util.Scanner;

/**
* @Author: WereAsh
* @Date:2026-01-11 20:07
**/
public class Solution027 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
String[] str=scanner.nextLine().split(",");
int val=scanner.nextInt();
int n=str.length;
int[] nums=new int[n];
for(int i=0;i<n;i++){
nums[i]=Integer.parseInt(str[i]);
}
int len=0; //统计不同于val的个数
for (int i=0;i<n;i++){
if(nums[i]!=val){ //等于val是len不变,则代表当前位置可以被原地替换
nums[len++]=nums[i];
}
}
System.out.println("len="+len);
for(int i=0;i<len;i++){
System.out.print(nums[i]+",");
}

}
}