剑指offer题解 和为S的连续正数序列

题目描述

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

import java.util.ArrayList;
public class Solution {
    public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
       ArrayList<ArrayList<Integer> > result= new ArrayList<ArrayList<Integer> >();
        if(sum<3) return result;
            int start=1;
            int end=2;
            int mid=(sum+1)/2;
            int num=start+end;
            while(start<mid && end < sum){
                if(num==sum){
                    ArrayList<Integer> temp=new ArrayList<Integer>();
                    for(int i=start;i<=end;i++){
                        temp.add(i);
                    }
                    result.add(temp);
                }
                while(num>sum&&start<mid){
                    num-=start;
                    start++;
                    if(num==sum){
                        ArrayList<Integer> temp=new ArrayList<Integer>();
                        for(int i=start;i<=end;i++){
                            temp.add(i);
                        }
                        result.add(temp);
                    }
                }
                end++;
                num+=end;
            }
        return result;
    }
}
<think>好的,用户想查找《剑指Offer》相关的编程题解、数据结构以及算法面试题的内容。首先,我需要回忆一下系统提供的引用内容。引用[1]提到了《剑指Offer》这本书,强调了它在题型总结、数据结构面试技巧方面的价值,并给出了GitHub上的相关资源。引用[2]则是一个Java实现的题解系列,分三天完成,可能包含具体的代码示例。 用户的需求是获取与《剑指Offer》相关的技术内容或题目解析,可能需要具体的例子资源链接。我应该先介绍这本书的重要性,然后分点说明其涵盖的内容,比如数据结构、算法思想、优化技巧等。接着,结合引用中的GitHub项目题解系列,提供资源链接,方便用户进一步学习。 需要注意回答结构清晰,使用中文,数学公式用正确的LaTeX格式。同时,生成的相关问题要围绕用户需求,比如题解资源、数据结构应用、面试准备方法等。还要确保引用标识正确添加,例如在提到书或项目时加上[^1]或[^2]。 需要检查是否遗漏了关键点,比如是否覆盖了用户提到的编程题解、数据结构算法面试题。另外,确认引用的资源是否准确,避免死链或错误信息。最后,确保生成的问题与用户查询紧密相关,帮助他们深入探索相关内容。</think>### 《剑指Offer》编程题解与算法面试题解析 《剑指Offer:名企面试官精讲典型编程题》是算法面试领域的经典书籍,涵盖数据结构、算法思想及面试技巧。以下是其核心内容及相关资源整理: --- #### 一、数据结构与经典题型 1. **链表** - 题目:反转链表、链表中环的检测、合并有序链表 - 解析:通过双指针或递归实现,例如反转链表可用迭代法(时间复杂度$O(n)$,空间复杂度$O(1)$)。 2. **树与二叉树** - 题目:重建二叉树、树的子结构、二叉搜索树的后序遍历序列 - 关键点:递归分治(如根据前序+中序序列重建二叉树)或层序遍历(队列实现)。 3. **栈与队列** - 题目:用两个栈实现队列、包含min函数的栈 - 解析:栈实现队列需维护输入/输出栈,保证先进先出[^1]。 --- #### 二、算法思想与优化 1. **动态规划** - 题目:剪绳子、最长不含重复字符的子字符串 - 公式推导:例如剪绳子问题,最优解为尽量分割为长度为3的段(数学证明:$3^{\frac{n}{3}} > 2^{\frac{n}{2}}$)。 2. **双指针与滑动窗口** - 题目:调整数组顺序使奇数位于偶数前、为s的连续正数序列 - 解析:双指针法可将时间复杂度优化至$O(n)$,例如有序数组的两数之。 --- #### 三、资源推荐 1. **GitHub题解与模板** - [labuladong的算法仓库](https://github.com/labuladong/fucking-algorithm):提供LeetCode题型分类及解题模板。 - [CyC2018的算法笔记](https://github.com/CyC2018/CS-Notes):总结《剑指Offer》代表性题目及代码实现。 2. **完整代码示例** ```java // 示例:斐波那契数列(动态规划优化) public int fibonacci(int n) { if (n <= 1) return n; int a = 0, b = 1; for (int i = 2; i <= n; i++) { int c = a + b; a = b; b = c; } return b; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值