(双指针) 剑指 Offer 57 - II. 和为s的连续正数序列 ——【Leetcode每日一题】

news2024/11/27 14:51:59

❓ 剑指 Offer 57 - II. 和为s的连续正数序列

难度:简单

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

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

示例 1:

输入:target = 9
输出:[[2,3,4],[4,5]]

示例 2:

输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]

限制

  • 1 < = t a r g e t < = 1 0 5 1 <= target <= 10^5 1<=target<=105

💡思路:双指针

我们用两个指针 ij 表示当前枚举到的以 i 为起点到 j 的区间,sum 表示 [i,j] 的区间和,由连续正数,所以求和公式为 :(起始 i = 1, j = 2) sum = ( l + r ) × ( r − l + 1 ) 2 \textit{sum}=\frac{(l+r) \times (r-l+1)}{2} sum=2(l+r)×(rl+1)
共有三种情况:

  1. sum == target
    • 则说明我们找到了以 i 为起点得合法解 [i,j] ,我们需要将 [i,j] 的序列放进答案数组;
    • 我们知道以 i 为起点的合法解最多只有一个,所以需要枚举下一个起点,往大的方向走,此时 i += 2j++
  2. sum < target
    • 指针 j 向右移动,使得 sum 增大,即 j++;
  3. sum > target
    • 指针 i 向右移动,使得 sum 减小,即 i++

终止条件即为 i >= j 或者指针 j 移动到了 target   +   1 2 \frac{\textit{target + 1}}{2} 2target + 1 的位置,导致 i < j 的时候区间和始终大于 target

🍁代码:(C++、Java)

C++

class Solution {
public:
    vector<vector<int>> findContinuousSequence(int target) {
        vector<vector<int>> ans;
        if(target < 2) return ans;
        for(int i = 1, j = 2; i < j && j <= (target + 1) / 2; ){
            int sum = (i + j) * (j - i + 1) / 2;
            if(sum == target){
                vector<int> temp;
                for(int k = i; k <= j; k++) temp.push_back(k);
                ans.push_back(temp);
                i += 2;
                j++;
            }else if(sum < target){
                j++;
            }else{
                i++;
            }
        }
        return ans;
    }
};

Java

class Solution {
    public int[][] findContinuousSequence(int target) {
        List<int[]> ans = new ArrayList<int[]>();
        if(target < 2) return new int[0][0];
        for(int i = 1, j = 2; i < j && j <= (target + 1) / 2; ){
            int sum = (i + j) * (j - i + 1) / 2;
            if(sum == target){
                int[] temp = new int[j - i + 1];
                for(int k = i; k <= j; k++) temp[k - i] = k;
                ans.add(temp);
                i += 2;
                j++;
            }else if(sum < target){
                j++;
            }else{
                i++;
            }
        }
        return ans.toArray(new int[ans.size()][]);
    }
}

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( t a r g e t ) O(target) O(target),由于两个指针移动均单调不减,且最多移动 target   +   1 2 \frac{\textit{target + 1}}{2} 2target + 1 次,即方法一提到的枚举的上界,所以时间复杂度为 O ( t a r g e t ) O(target) O(target)
  • 空间复杂度 O ( 1 ) O(1) O(1),除了答案数组只需要常数的空间存放若干变量。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zookeeper的应用

Zookeeper的配置文件解析: Zookeeper内部原理: 选举机制 半数机制:在集群环境中半数以上的机器存活,这个集群可用,所以在设计Zookeeper集群系统时&#xff0c;通常会选择 奇数台服务器来搭建Zookeeper的集群 虽然在配置文件中并没有指定Master和Slave。但是&#xff0c;Zookeep…

【安全狗】linux免费服务器防护软件安全狗详细安装教程

在费用有限的基础上&#xff0c;复杂密码云服务器基础防护常见端口替换安全软件&#xff0c;可以防护绝大多数攻击 第一步&#xff1a;下载服务器安全狗Linux版&#xff08;下文以64位版本为例&#xff09; 官方提供了两个下载方式&#xff0c;本文采用的是 方式2 wget安装 方…

09.计算机网络——套接字编程

文章目录 网络字节序socket编程socket 常见APIsockaddr结构 UDP编程创建socket绑定socketsendto发送数据recvform接收数据关闭socket TCP编程创建socket绑定socketlisten监听套接字accept服务端接收连接套接字connect客户端连接套接字send发送数据recv接收数据关闭socket 工具n…

算法训练营第四十六天||● 139.单词拆分 ● 关于多重背包,你该了解这些! ● 背包问题总结篇!

● 139.单词拆分 这道题和完全背包一样&#xff0c;求排列数相当于 字符串相当于背包&#xff0c;字串相当于物品 注意find方法的使用 find&#xff08;s.begin(),s.end(),"zichuan") 还有s.substr的使用s.substr(起始位置&#xff0c;截取长度&#xff09; clas…

Stable Diffusion服务环境搭建(远程服务版)

Stable Diffusion服务环境搭建&#xff08;远程服务版&#xff09; Stable Diffusion是什么 Stable diffusion是一个基于Latent Diffusion Models&#xff08;潜在扩散模型&#xff0c;LDMs&#xff09;的文图生成&#xff08;text-to-image&#xff09;模型。具体来说&#…

ES6基础知识一:说说var、let、const之间的区别

一、var 在ES5中&#xff0c;顶层对象的属性和全局变量是等价的&#xff0c;用var声明的变量既是全局变量&#xff0c;也是顶层变量 注意&#xff1a;顶层对象&#xff0c;在浏览器环境指的是window对象&#xff0c;在 Node 指的是global对象 var a 10; console.log(window.…

VUE3---->基础入门

目录 vue 基础入门 1、解读核心关键词&#xff1a;框架 2、vue 的版本 3、vue 的调试工具 vue 基础入门 vite 的基本使用 1. 创建 vite 的项目 2. 梳理项目的结构 3. vite 项目的运行流程 组件的基本使用 1. 组件的注册 2. 组件之间的样式冲突问题 3. 组件的 props …

穿透内网群晖NAS实现远程访问【无公网IP】

穿透内网群晖NAS实现远程访问【无公网IP】 现代科技日新月异&#xff0c;我们身边的电子设备也在不断更新&#xff0c;日积月累之下&#xff0c;被淘汰的电子设备越来越多&#xff0c;难道就让这些性能不算差的电子设备从此闲置么&#xff0c;这明显不符合我们物尽其用的原则&a…

记录安装stable diffusion webui时,出现的gfpgan安装卡住的问题

参考链接&#xff1a;(145条消息) 使用stable diffusion webui时&#xff0c;安装gfpgan失败的解决方案&#xff08;windows下的操作&#xff09;_新时代原始人的博客-CSDN博客

[書籍]思考的框架

圖片來源:博客來書店 《思考的框架》是一本極具啟發性和實用性的書籍&#xff0c;它以系統性和綜合性的方式引導讀者運用跨學科思維來解決問題和拓展思維視野。作者巧妙地整合了來自不同領域的思想家和學者的觀點&#xff0c;從心理學到經濟學&#xff0c;從哲學到科學等&#…

docker安装jdk

文章目录 1.安装镜像2.查看已安装的镜像4.运行容器5.进入JDK 容器6.查看JDK版本 1.安装镜像 找到所要安装的镜像版本&#xff0c;复制命令 输入命令&#xff0c;下载openjdk8镜像 命令作用docker pull openjdk:8拉取版本号为8的镜像 2.查看已安装的镜像 命令作用docker ima…

指针大厂笔试真题讲解(c语言篇)

大家好&#xff0c;我是c语言boom家宝&#xff0c;今天为大家带来的是c语言指针内容在大厂笔试中的真题讲解&#xff0c;希望能让初学者对指针有更深入的理解。 ps&#xff1a;如有侵权&#xff0c;请私信联系&#xff0c;立刻删除。 真题一&#xff1a; 答案&#xff1a;2 &…

SpringCloud分布式项目下feign的使用

新建一个feign的微服务&#xff08;后面统称为A&#xff09;&#xff0c;其他项目要使用利用maven导入该服务模块的依赖就行了 导入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</…

【C++】STL——list的使用和介绍、list的构造函数及其使用、list迭代器及其使用

文章目录 1.list的介绍和使用2.list的构造函数&#xff08;1&#xff09;list (size_type n, const value_type& val value_type()) &#xff08;2&#xff09;list() 构造空的list&#xff08;3&#xff09;list (const list& x) 拷贝构造函数&#xff08;4&#xff…

Spring Boot创建与运行

Spring Boot创建与运行 ​ 经过之前 Spring 文章的铺垫&#xff0c;终于来到了基于 Spring &#xff0c;并且也是 Spring 最火的框架之一 Spring Boot &#xff0c;在企业或者个人项目中&#xff0c;基本都是使用 Spring Boot &#xff0c;所以 Spring Boot 在 Spring 的学习阶…

Spring Boot 源码学习之@EnableAutoConfiguration注解

EnableAutoConfiguration 注解 引言主要内容1. EnableAutoConfiguration 功能解析1.1 常见的自动配置示例1.2 源码介绍 2. Import 注解介绍3. AutoConfigurationPackage 注解介绍 总结 引言 在 Huazie 的上篇博文中&#xff0c;我们详细了解了关于 SpringBootApplication 注解…

【论文阅读 03】机器学习算法在颈动脉斑块影像学分类中的研究进展

读完之后就是&#xff0c;总结 机器学习&#xff08;SVM、小波&#xff09;和深度学习&#xff08;CNN&#xff09;在 颈动脉斑块影像学中的 分类效果。只讨论了超声、磁共振两种成像 Chin J Clin Neurosci 临床神经科学杂志 复旦大学 颈动脉斑块( carotid plaques) 是一种…

JavaScript基础篇(31-40题)

此文章&#xff0c;来源于印客学院的资料【第一部分&#xff1a;基础篇(105题)】&#xff0c;也有一些从网上查找的补充。 这里只是分享&#xff0c;便于学习。 诸君可以根据自己实际情况&#xff0c;自行衡量&#xff0c;看看哪里需要加强。 概述如下&#xff1a; javascri…

使用Docker在局域网安装GitLab

使用 Docker 安装 GitLab 1. 安装GitLab 最近想在本地创建一个GitLab仓库&#xff0c;简单记录一下&#xff1a; 简单设置一个GitLab信息的存储目录 export GITLAB_HOME/etc/docker/gitlab/ && mkdir &GITLAB_HOMEdocker中启动 sudo docker run --detach \# 以…

C++:类和对象(上)---初步认识类和this指针

文章目录 面向过程和面向对象类的引入类的定义类定义的方式 类的访问限定符类的实例化类对象模型类对象的大小 this指针 面向过程和面向对象 C语言是一门面向过程的语言关注的是过程&#xff0c;确认一个问题求解的步骤&#xff0c;再一步一步对它进行解决 C是一门基于面向对…