栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Acwing76.和为S的连续整数序列——java集合使用clear()清空集合的注意点

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Acwing76.和为S的连续整数序列——java集合使用clear()清空集合的注意点

题目描述:
输入一个非负整数 S,打印出所有和为 S 的连续正数序列(至少含有两个数)。

例如输入 15,由于 1+2+3+4+5=4+5+6=7+8=15,所以结果打印出 3 个连续序列 1∼5、4∼6 和 7∼8。

示例:

输入:15

输出:[[1,2,3,4,5],[4,5,6],[7,8]]

算法思路:
本题,直接使用双指针即可解决,定义两个指针slow和fast,slow从第一个元素开始,然后fast初始位置比slow+1,依次遍历fast累加看是否达到sum值,然后将每次的值存入到list当中,满足条件将整个list存入到一个res列表当中,再次清空list。
ps
这里需要注意的是,在清空list的时候不要使用clear()方法,因为虽然clear()方法是在list添加到res集合之后再次使用的,但是list索引还是指向那个添加到元素,这样使用clear()之后还是会将集合当中的元素清空,这里可以采用要么使用一个中间列表来存储list的值,或者重建一个集合。

算法实现:

class Solution {
    public List > findContinuousSequence(int sum) {
       //定义两个指针,整数序列不包括0
       int slow = 1;
       int fast = 2;
       //定义一个链表用来存储元素
       List> list = new ArrayList<>();
       //定义一个链表用来存储满足条件的结果序列
       List list2 = new ArrayList<>();
       int per = 0;
       while(fast<=sum){
           list2.add(slow);
           per = slow;
           while(per+fast();
           }else{
               //加上最后一个fast指针不满足,重新更新
               slow = slow+1;
               fast = slow+1;
               list2 = new ArrayList<>();
           }
       }
    //   for(List num:list){
    //       System.out.println(num);
    //   }
       return list;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/755223.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号