> 文档中心 > 删除排序数组中的重复项(力扣)

删除排序数组中的重复项(力扣)

给你一个升序排列的数组nums,请你 原地 删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。不需要考虑数组中超出新长度后面的元素。

import java.util.Arrays;import java.util.Scanner;//给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持 一致 。//不考虑数组中超出新长度后面的元素.//思路:由于题目要求只能在原数组上删除,且该数组是个排好序的数组。那么我们可以定义一个游标 index,来记录需要替换为后面数据的位置。// 由于第一个元素肯定是要保留在数组中的,因此起始,我们将游标指向数组的第二个元素(此位置为可能替换元素的位置),数组下标指向第二个元素。// 判断游标指向位置的前一个元素的值和当前获取的数组下标值是否相同。若相同,则游标位置不变,数组下标后移。// 若不同,代表需要把新元素替换到游标指向的位置。则替换元素,并且游标指向下一个位置,计数项加一。//按此操作循环整个数组可得到最终结果。public class Main {    public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int nums[]=new int [n];//输入数据长度 for (int i = 0; i < n; i++) {     nums[i]=sc.nextInt();//输入数据 } Arrays.sort(nums);//快排,因为要求是有序列表 int x=nums.length; int a=1; int b=1;//双指针 while(a<x) {//覆盖     if (nums[a]!=nums[a-1]) {  nums[b]=nums[a];  ++b;     }     ++a; } System.out.println(b);//输出新长度 System.out.println(Arrays.toString(nums));//输出数组,答案看数组前面的新长度内的元素    }    }