zoukankan      html  css  js  c++  java
  • 剑指OFFER 和为S的连续整数序列

    剑指OFFER 和为S的连续整数序列

    题目描述

    小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?
    Good Luck!

    思路

    剑指OFFER 连续数组的最大和解法相似

    都是通过穷举把所有的和求出来,但是运用到了一些动态规划的思想.

    下面的代码中仍然有可以优化的地方,例如num数组实际上可以不需要,从而节省一些空间,但是为了直接移植以前写过的代码还是使用了.

    代码

    class Solution {
    public:
    vector<vector<int> > FindContinuousSequence(int sum) {
            vector<vector<int> > dp(sum,vector<int>(sum));
            vector<int> num(sum);
            vector<vector<int> >res;
    
            //初始化num
            for(int i=0;i<sum;i++)
            {
                num[i] = i+1;
            }
    		
        	//初始化正对角线的元素,保证dp正确进行
            for(int i=0;i<sum;i++)
            {
                dp[i][i] = num[i];
            }
    
            for(int i=0;i<sum;i++)
            {
                for(int j=1;j<sum;j++)
                {
                    if(i>=j)continue;
                    dp[i][j] = dp[i][j-1] + num[j];
    
                    if(dp[i][j]==sum){
                        vector<int> per_res;
                        for(int k=i;k<=j;k++)
                        {
                            per_res.push_back(num[k]);
                        }
                        res.push_back(per_res);
                    }
                }
            }
    
            return res;
        }
    };
    
  • 相关阅读:
    Java8基础学习之Object类
    Java8基础之equals方法和==的区别
    Spring集成ElasticSearch
    ElasticSearch常用的查询过滤语句
    数据库查看SQL执行计划
    数据库优化总结
    ElasticSearch之集群原理
    curl命令操作ElasticSearch总结
    ElasticSearch相关概念总结
    ElasticSearch基础入门
  • 原文地址:https://www.cnblogs.com/virgildevil/p/12221466.html
Copyright © 2011-2022 走看看