100-3 最长连续序列(中等)(每日一题 Java求解)

前置知识: Set是散列集,用于存储不重复的且不与其他数据相关联的值。Set中的add()方法可以加入元素到散列集,加入的元素不允许与已有元素重复。

 


求解思路:先将nums数组的所有元素添加到Set集合中,其中的元素没有重复的;随后遍历Set中的元素,先找到其中连续序列里的最小的元素,这一步是通过Set的contains方法来判断的,遍历集合,如果集合中不包含比现在的元素小1的元素,则说明当前元素是连续序列里的最小值。此时记下当前的连续序列最小值,并设置计数器为1,随后继续遍历集合,如果Set中有元素比当前元素大1,则计数器递增,当前元素改变为原元素+1,继续循环,选择计数器较大的值返回即可。

附上代码:

 


 知识点解析:

  1. for(int i : nums) :Java 中的增强型 for 循环语法,也称为 for-each 循环,用于遍历数组或集合中的元素;int i  定义了整型的迭代变量 i ,用于存储数组nums中的每一个元素,:冒号表示要遍历元素, nums是要遍历的数组或集合名。
  2. if(!set.contains(i-1))   为了寻找连续递增不重复序列的起始数字,比如

    nums = [100,4,200,1,3,2]  找到的第一个curr=100  最后currcount=1   第二个curr=200  最后currcount=1   第三个curr=1,最后currcount=4  max(1,1,4,0)=4 
  3. while(set.contains(curr+1))只要有比curr大1的就给计数器+1,已经可以确定没有重复的数字,curr也是连续序列中的最小值,因此这样计算出来的数字再配合max一定是正确的答案

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值