LeetCode 3396 题解

题解

范围允许暴力

先上图解

拿以下示例举个例子

[1,2,3,4,2,3,5,7]

当i=0时,set集合添加值1
当i=1时,set集合添加值2
当i=2时,set集合添加值3
当i=3时,set集合添加值4
当i=4时,set集合添加值2时发现我们在i=1时已经添加过了,所以会返回false,那我们就在这里设一个条件来改变状态移除当前set集合并记录下来一次,这里我设置值setNum自增
然后就是改变i的值因为是移除三个元素所以我们需要重新在第三个值后遍历也就是从i=3往后遍历
而i的值与setNum也有关,i = setNum * 3 - 1,但是也得防止i越界所以要判断是否可以使得i值成立不大于n(即数组的长度),不然直接返回setNum

class Solution{
	public int number(int[] nums){
		Set<Integer> set = new HashSet<>();
		int n = nums.length;
		int setNum = 0;
		for(int i=0;i<n;i++){
			if(!set.add(nums[i])){
				setNum++;
				if((3*setNum)>=n){
					return setNum;
				}else{
					i = 3*setNum-1;
				}
				set.clear();
			}
		}
		return setNum;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值