zoukankan      html  css  js  c++  java
  • 面试题57

    描述

    输入一个正整数 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

    思路

    • 方法1 滑动窗口
      l是窗口左边,r是窗口右边,当窗口和小于target时,r右移,当窗口和大于target时,l右移,如果相等则找到所求其中一个解。
    class Solution {
    public:
        vector<vector<int>> findContinuousSequence(int target) {
            vector<vector<int>> res;
            for(int l=1,r=1,sum=0;r<target;r++){
                sum+=r;
                while(sum>target){
                    sum-=l++;
                }
                if(sum==target){
                    vector<int> temp(r-l+1);
                    for(int i=0;i<temp.size();i++){
                        temp[i]=l+i;
                    }
                    res.push_back(temp);
                }
            }
            return res;
        }
    };
    
  • 相关阅读:
    HashSet源码分析
    Mysql的体系结构和存储引擎
    触发器
    存储过程和函数
    索引
    SpringBoot 中的日志使用
    log4j2
    Logback
    slf4j
    日志门面
  • 原文地址:https://www.cnblogs.com/hunter-w/p/12723597.html
Copyright © 2011-2022 走看看