删除排序数组相邻的重复元素-Java实现

题目辨析

1.给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组。
(见leetcode第26题 删除排序数组中的重复项)
输入:112
输出:12
2.给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组。
(见leetcode第80题 删除排序数组中的重复项II)
输入:111223
输出:11223


待续

JAVA代码

1.给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次
算法思想: 放置两个指针 slow 和 fast,其中 slow 是慢指针,而 fast 是快指针。只要 nums[slow]=nums[fast],我们就增加 fast 以跳过重复项

public static int[] removeDuplicates1(int[] nums) {
        if(nums.length==0) return new int[0];
        int slow=0;
        for(int fast=1; fast<nums.length;fast++){
            if(nums[fast]!=nums[slow])
                slow++;
                nums[slow]=nums[fast];
        }
        return Arrays.copyOf(nums,slow+1);
    }

2.给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次
算法思想: 增加一个重复个数的状态repeatNum;当快指针指向的是和慢指针相同的元素,用repeatNum判断

public static int[] removeDuplicates2(int[] nums) {
		if(nums.length==0) return new int[0];
		int slow=0;
		int repeatNum=1;
		for(int fast=1;fast<nums.length;fast++) {
			if(nums[fast]!=nums[slow]) {
				nums[++slow]=nums[fast];
				repeatNum=1; //计数清楚
			}
			else {
				if(repeatNum<2) {
					nums[++slow]=nums[fast];
					repeatNum++;
				}
			}
		}
		return Arrays.copyOf(nums,slow+1);
	}
测试用例
public static void main(String[] args) {
		int nums1[]= {1,1,2};
		System.out.println(Arrays.toString(removeDuplicates1(nums1)));
		
		int nums2[]= {1,1,1,2,2,3};
		System.out.println(Arrays.toString(removeDuplicates2(nums2)));
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值