package com.apesblog.day_20221212;
/**
* @author ZhangYuShun
* @since 2022/12/12
* 删除排序数组中的重复项
* <p>
* 一个有序数组 nums ,原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长
* 度。
* 不要使用额外的数组空间,必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
* 双指针算法:
* 数组完成排序后,我们可以放置两个指针 i 和 j,其中 i 是慢指针,而 j 是快指针。只要
* nums[i]=nums[j],我们就增加 j 以跳过重复项。
* 当遇到 nums[j] != nums[i]时,跳过重复项的运行已经结束,必须把nums[j])的值复制到 nums[i +
* 1]。然后递增 i,接着将再次重复相同的过程,直到 j 到达数组的末尾为止。
*/
public class RemoveDuplicates {
public static void main(String[] args) {
int[] nums = {0, 1, 1, 2, 2, 3, 3, 4, 5, 5};
int count = removeDuplicates(nums);
System.out.println(count);
}
private static int removeDuplicates(int[] nums) {
int count = 0;
for (int i = 0, j = 1; j < nums.length; j++) {
if (nums[i] != nums[j]) {
count++;
i = j;
}
}
return count + 1;
}
}
版权归属:
小顺
许可协议:
本文使用《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》协议授权
评论区