提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
给你⼀个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现⼀次 ,返回删除后数组的
新⻓度。元素的 相对顺序 应该保持 ⼀致 。
由于在某些语⾔中不能改变数组的⻓度,所以必须将结果放在数组nums的第⼀部分。更规范地说,如果在删除重
复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。
将最终结果插⼊ nums 的前 k 个位置后返回 k 。
不要使⽤额外的空间,你必须在 原地 修改输⼊数组并在使⽤ O(1) 额外空间的条件下完成。
输入输出
示例 1:
输⼊:nums = [1,1,2] 输出:2, nums = [1,2,_] 解释:函数应该返回新的⻓度 2 ,并且原数组 nums 的前两个元素
被修改为 1, 2 。不需要考虑数组中超出新⻓度后⾯的元素。
public class removeDuplicates {
public static void main(String[] args) {
// 创建一个 Scanner 对象,用于从控制台读取输入
Scanner scanner = new Scanner(System.in);
// 提示用户输入一串升序排列的整数
String input = scanner.nextLine(); // 读取用户输入的一整行
//"0,0,1,1,1,2,2,3,3,4"
// 将输入的字符串分割成字符串数组,并转换为整数数组
String[] inputArray = input.split(",");
// 经过 split(" ") 分割后,变成了:inputArray = ["0", "0", "1", "1", "1", "2", "2", "3", "3", "4"]
int[] nums = new int[inputArray.length];
for (int i = 0; i < inputArray.length; i++) {
nums[i] = Integer.parseInt(inputArray[i]); // 将字符串转换为整数
}
// 调用方法,获取删除重复项后的新长度
int newLength = removeDuplicates(nums);
// 输出新长度
System.out.println(newLength);
// 输出删除重复项后的数组内容(只输出前 newLength 个元素)
for (int i = 0; i < newLength; i++) {
System.out.print(nums[i] + " ");
}
}
public static int removeDuplicates(int nums[]){
int n = nums.length;
int j = 0;
for(int i = 0; i < n; i++){
if(i == 0 || nums[i] != nums[i-1]){
nums[j] = nums[i];
j++;
}
}
return j;
}
}
结果如图