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

    面试题57 - II. 和为s的连续正数序列

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

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

    方法

    1. 暴力:

    class Solution {
    public:
        vector<vector<int>> findContinuousSequence(int target) {
            vector<vector<int> > res;
            for(int i = 1; i < target; i++) {
                int j = i, sum = 0;
                vector<int> v;
                while(sum < target) {
                    sum += j;
                    v.push_back(j);
                    j++;
                }
                if(sum == target) {
                    res.push_back(v);
                }
            }
            return res;
        }
    };
    

    优化 (滑动窗口) (尺取法)

    左边界小于 target / 2就可以了因为只能取到两个连续整数, 如果target / 2 + target / 2 + 1都不能满足, target / 2 + 1 + targe5 / 2 + 2一定 > target
    sum 为此时连续数字相加的值, 如果值 > target sum - i, i++ 如果值 < target , sum + j, j++; (注意顺序, sum 先 加上 j  j再++)
    
    class Solution {
    public:
        vector<vector<int>> findContinuousSequence(int target) {
            vector<vector<int> > res;
            int i = 1, j = 1, sum = 0;
            while(i <= (target + 1) / 2) {
                if(sum < target) {
                    sum += j;
                    j++;
                } else if(sum > target) {
                    sum -= i;
                    i++;
                } 
                if(sum == target) {
                    vector<int> v;
                    for(int k = i; k < j; k++) {
                        v.push_back(k);
                    }
                    res.push_back(v);
                    sum -= i;
                    i++;
                }
            }
            return res;
        }
    };
    
  • 相关阅读:
    常用数据结构的应用场景
    数组与链表的对比
    [LeetCode 293] Flip Game
    [Leetcode] Palindrome Permutation 回文变换
    九大排序算法再总结
    query函数的可查询数据
    Column常用的参数
    sqlalchemy的常用字段
    sqlalchemy基本的增删改查
    sqlalchemy映射数据库
  • 原文地址:https://www.cnblogs.com/csyxdh/p/12435392.html
Copyright © 2011-2022 走看看