LeetCode 80. 删除有序数组中的重复项 II (杂题
原题链接
简单
作者:
JustDoIt11
,
2024-03-16 19:38:03
,
所有人可见
,
阅读 6
import java.util.Arrays;
/**
* @Title: lec80
* @Author 李浩天
* @Date 2024/3/16 下午7:21
* @description:
*/
public class lec80 {
// O(n)
public int removeDuplicates(int[] nums) {
int slow = 0;
int quick = 0;
int nowTag = 0;
while (quick < nums.length) {
if (quick == 0 || nums[quick] == nums[quick - 1]) {
nowTag ++ ;
} else {
nowTag = 1;
}
if (nowTag <= 2) {
nums[slow] = nums[quick];
slow ++ ;
}
quick ++ ;
}
return slow;
}
// O(n)
public int removeDuplicates2(int[] nums) {
// nums已经有序
return process(nums, 2);
}
public int process(int[] nums, int k) {
// 剩余的元素数量
int ret = 0;
for (int x : nums) {
// 直接拿当前留下来的数的倒数第k个和x相比, 如果不同说明当前遍历的数还没重复k个以上, 符合要求
if (ret < k || nums[ret - k] != x) {
nums[ret ++ ] = x;
}
}
return ret;
}
}