zoukankan      html  css  js  c++  java
  • 和为 S 的连续正数序列


    输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序


    解题思路

    采用双指针技术,就是相当于有一个窗口,窗口的左右两边就是两个指针,我们根据窗口内值之和来确定窗口的位置和宽度。

    import java.util.ArrayList;
    public class Solution {
        public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
            // 存放结果
            ArrayList<ArrayList<Integer>> results = new ArrayList<>();
            // 两个起点,相当于动态窗口的两边,根据其窗口内的值的和来确定窗口的位置和大小
            int low = 1, high = 2;
            while(high > low) {
                // 由于是连续递增的序列,求和公式是 (a0+an)*n/2
                int cur = (low + high) * (high - low + 1) / 2;
                // 相等,那么就将窗口范围的所有数添加进结果集
                if(cur == sum) {
                    ArrayList<Integer> list = new ArrayList<>();
                    for(int i = low; i <= high; i++) {
                        list.add(i);
                    }
                    results.add(list);
                    low++;
                // 如果当前窗口内的值之和大于 sum,那么左边窗口右移一下
                } else if(cur > sum) {
                    low++;
                // 如果当前窗口内的值之和小于 sum,那么右边窗口右移一下
                } else {
                    high++;
                }
            }
            return results;
        }
    }
    

  • 相关阅读:
    开窗函数Over用法
    Linux文件搜索命令
    Linux更改文件或目录的所有者和所有组
    Linux权限管理
    不使用临时变量 交换两个变量值
    jQuery获取区间随机数
    jQuery对checkbox选中和取消选中操作
    MySQL优化
    MySQL中explain的用法
    MySQL中好用的GROUP_CONCAT函数
  • 原文地址:https://www.cnblogs.com/Yee-Q/p/13858303.html
Copyright © 2011-2022 走看看