美文网首页算法练习
和为target的连续正数序列(LeetCode面试题)

和为target的连续正数序列(LeetCode面试题)

作者: 倚剑赏雪 | 来源:发表于2020-03-06 17:19 被阅读0次

    题目

    输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。

    序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

    示例 1:

    输入:target = 9
    输出:[[2,3,4],[4,5]]
    示例 2:

    输入:target = 15
    输出:[[1,2,3,4,5],[4,5,6],[7,8]]

    限制:

    1 <= target <= 10^5

    解析

    • 使用“滑动列表”形式处理
      *设置一个i和j,开始时若i到j之间的数加起来小于target,则j++,反之,sum减掉i,i++;


      移动过程

    代码

    public int[][] FindContinuousSequence(int target) {
              List<int[]> res = new  List<int[]>();
            int i = 1;
            int j = 1;
            int sum = 0;
            while (i <= target/2)
            {
                if (sum < target) sum += j++;
                else if (sum > target) sum -= i++;
                else
                {
                    int[] temp = new int[j-i];
                    for (int k = i; k < j; k++)
                    {
                        temp[k-i] = k;
                        Console.WriteLine(k);
                    }
                    res.Add(temp);
                    sum -= i++;
                    sum += j++;
                }
            }
            return res.ToArray();
        }
    

    相关文章

      网友评论

        本文标题:和为target的连续正数序列(LeetCode面试题)

        本文链接:https://www.haomeiwen.com/subject/hmhwrhtx.html