【剑指offer】-和为S的连续正数序列-39/67

简介: 【剑指offer】-和为S的连续正数序列-39/67

1. 题目描述

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

2. 题目分析

  1. 给你一个数字sum,让你在0~sum之间求连续数字加起来等于sum的序列
  2. 首先,比较好想的是O(n*n)的做法,外层从1到sum,内层从2到sum,判断其是否等于sum,
  3. 这里主要介绍第二种做法,类似【剑指offer】-和为S的两个数-38/67
  4. 我们还是用两个指针,不过和上面不一样的是,我们第一个指针指向的是1(left),第二个指针指向的是2(right),我们用sum1来代表区间和
  5. 如果sum1==sum的话,我们直接返回left~right,
  6. 如果sum1 > sum的话,也就是我们目前的数字过大,我们需要将第一个指针往后一位(left++),顺便更新sum1的值(sum1 = sum1 - left + 1)
  7. 如果sum1 < sum的话,也就是我们目前的数字过小,我们需要将第二个指针往后一位(right++),顺便更新sum1的值(sum1 = sum1 + right)

3. 题目代码

public static ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
    ArrayList<ArrayList<Integer>> list = new ArrayList<>();
    if (sum < 3) {
      return list;
    }
    int left = 1;
    int right = 2;
    int sum1 = 3;
    int mid = (sum / 2) + 1;
    while (left < right && right <= mid) {
      if (sum1 == sum) {
        ArrayList<Integer> list2 = new ArrayList<>();
        for (int i = left; i <= right; i++) {
          list2.add(i);
        }
        list.add(list2);
        right++;
        sum1 = sum1 + right;
      } else if (sum1 < sum) {
        right++;
        sum1 = sum1 + right;
      } else {
        sum1 = sum1 - left;
        left++;
      }
    }
    return list;
  }


相关文章
|
9月前
|
移动开发 数据可视化 前端开发
tmagic - editor:大厂开源项目,零代码/低代码页面可视化编辑的利器,多端统一方案揭秘!如何用一套代码支持H5/PC,牛牛牛~~~
腾讯推出的开源项目 **tmagic-editor** 是一款所见即所得的页面可视化编辑器,支持H5、PC、TV等多种页面类型。它已应用于腾讯视频会员、腾讯会议等业务,每月生产和发布数百个页面,极大提高了开发效率。通过简单的拖拽和配置,非技术人员也能轻松创建复杂页面。tmagic-editor 支持 Vue2/Vue3 和 React 等多种前端框架,并提供了丰富的扩展功能,满足不同业务需求。
878 3
Vue3走马灯(Carousel)
这是一个基于 Vue2 的走马灯(Carousel)组件,支持丰富的自定义配置。主要属性包括图片数组、宽度、高度、自动切换、暂停轮播、过渡效果、轮播间隔、箭头和指示点等。组件提供了多种过渡效果(如滑动和渐变)及动画时长设置,并允许自定义箭头和指示点的样式。此外,还支持通过键盘方向键进行切换,提供了灵活的使用方法。
619 3
Vue3走马灯(Carousel)
|
10月前
|
存储 数据处理 对象存储
云端问道方案教学4期—多媒体数据存储与分发
本文整理自阿里云存储服务产品团队关于多媒体数据存储与分发的分享,涵盖以下四部分内容:1)行业痛点及背景:分析Web 2.0到AIGC时代下多媒体行业的存储挑战;2)方案优势介绍:结合对象存储(OSS)、智能媒体管理(IMM)和内容分发网络(CDN),提供高效、低成本的解决方案;3)典型场景应用:包括音视频、在线教育、网站/APP/小程序、游戏下载等场景的具体应用;4)选型推荐:根据业务需求选择合适的产品配置。该方案通过动静分离、智能处理和全球加速,帮助企业在数据存储与分发中实现降本增效。
215 2
|
关系型数据库 MySQL
【MySQL】经典练习题(部门表、员工表、工资表)
【MySQL】经典练习题(部门表、员工表、工资表)
632 0
|
存储 弹性计算 数据库
阿里云服务器购买教程
作为一家全球领先的云计算服务提供商,阿里云提供了多种云产品和解决方案,包括云服务器、对象服务OSS、数据库、存储、SSL、域名和CDN 等。阿里云服务器是一种灵活可扩展的云计算服务,适用于各种规模和类型的企业和个人用户。阿里云以其出色的性能和极高的可靠性而备受青睐,除此之外阿里云优惠力度也比较大。在这篇文章中,我们将向您展示如何快速购买阿里云服务器。
800 0
阿里云服务器购买教程
|
JSON 监控 Unix
License二次验证机制:管理公共集群上的Sentieon授权资源
License二次验证机制:管理公共集群上的Sentieon授权资源
348 0
|
算法 Java 数据库
一张流程图带你学会SpringBoot结合JWT实现登录功能(二)
一张流程图带你学会SpringBoot结合JWT实现登录功能
281 0
|
数据采集 机器学习/深度学习 算法
大数据分析案例-基于RFM模型对电商客户价值分析(聚类)
大数据分析案例-基于RFM模型对电商客户价值分析(聚类)
1795 0
大数据分析案例-基于RFM模型对电商客户价值分析(聚类)
|
前端开发 调度
带你深入React 18源码之:useMemo、useCallback和memo
在这篇文章中,我们将探讨useMemo、useCallback和memo的用法和区别,并通过源码分析来理解它们的工作原理,开整!
带你深入React 18源码之:useMemo、useCallback和memo