题解
范围允许暴力
先上图解
拿以下示例举个例子
[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;
}
}