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

    题目:

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

    输出描述:

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

    代码:

     1 class Solution {
     2 public:
     3     vector<vector<int> > FindContinuousSequence(int sum) {
     4         vector<int> p;
     5         vector<vector<int> > list;
     6         int low = 1, high = 2;
     7         while(low < high) {
     8             // 求和公式(a1+an)*n/2
     9             int count = (low + high)*(high - low + 1) >> 1;
    10             if(count == sum){
    11                 for(int i = low; i <= high; i ++)
    12                     p.push_back(i);
    13                 list.push_back(p);
    14                 p.clear(); low ++;
    15             }
    16             else if(count < sum) high ++;
    17             else low ++;
    18         }
    19         return list;
    20     }
    21 };

    我的笔记:

      利用窗口滑动原理,设置两个指针,分别指向头和尾,后根据窗口内序列和来判断窗口的移动方向。

    
    
  • 相关阅读:
    c++-面向对象:类和对象
    c++-内联函数和函数重载和默认参数和函数指针
    c++-引用
    c++-const
    c++--语言本身
    排序-基数排序
    排序-归并排序
    排序-堆排序
    常用Java API: ArrayList(Vector) 和 LinkedList
    常用Java API:Calendar日期类
  • 原文地址:https://www.cnblogs.com/john1015/p/13087932.html
Copyright © 2011-2022 走看看