两数之和 II - 输入有序数组,三数之和

题目一:

代码如下:

vector<int> twoSum(vector<int>& numbers, int target)
{int left = 0;int right = numbers.size() - 1;vector<int> ret;while (left < right){int tmp = numbers[left] + numbers[right];if (tmp == target){ret.push_back(left + 1);ret.push_back(right + 1);break;}else if (tmp > target)right--;elseleft++;}return ret;
}

思路整理:运用双指针思想,结合序列非递减的性质,解决问题。

具体逻辑以及变量解释:

<1>首先,left指向有序序列的最左端,right指向有序序列的最右端,left逐渐向右移,right逐渐向左移。

<2>如果tmp == target,存入left的位置和right的位置,跳出循环即可。

<3>如果tmp > target,说明右边界的值应该小一些,此时right--。

<4>如果tmp < target,说明左边界的值应该大一些,此时left++。

<5>最终返回结果即可。

题目二:

代码如下:

vector<vector<int>> threeSum(vector<int>& nums)
{int i = 0;vector<vector<int>> ret;sort(nums.begin(), nums.end());//排序while (i < nums.size()){int start = nums[i];int left = i + 1;int right = nums.size() - 1;while (left < right && left < nums.size() && right >= 0){int sum = nums[left] + nums[right];if (sum < -nums[i]) ++left;else if (sum > -nums[i]) --right;else{int num_left = nums[left];int num_right = nums[right];ret.push_back({ num_left,num_right,nums[i] });while (left < right && nums[left] == num_left)++left;while (left < right && nums[right] == num_right)--right;}}while (i < nums.size() && nums[i] == start)++i;}return ret;
}

思路整理:运用双指针思想,通过每次固定一个数字,再在剩余的部分通过双指针来找到对应的和。

具体逻辑和变量解释:

<1>为了便于通过双指针来找特定的和,可以对整个序列先进行排序。

<2>i变量从左到右遍历序列,start表示i位置的具体数字,left表示i位置之后的位置,也是待寻找的左区间,right作为待寻找的右区间。

<3>start固定,找到nums[left] + nums[right] == -start即可。

<4>找到之后,将nums[i],nums[left],nums[right]放入最终结果中,接着left向右移动,确保新的nums[left]不和存入结果的nums[left]相同,right向左移,确保新的nums[right]不和存入结果的nums[right]相同,继续寻找以start为左定点的组合,直到寻找完毕。

<5>i向右移,确保新的nums[i] != start即可。

<6>返回最终结果即可。

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

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

相关文章

2024全国青少年电子信息智能创新大赛(决赛)python·模拟二卷解析

2024全国青少年电子信息智能创新大赛(决赛)python模拟二卷解析 一、程序题第一题: 描述 随机生成的 10 个在[1,100)范围内整数存入列表;输入一个待查找的整数 k,运用二分法在列表中查找 k,根据查找状态输出对应的结果。 输入: [13, 25, 27, 41, 52, 66, 67, 69, 72, 75] 7…

数据分析------统计学知识点(一)

1.在统计学中&#xff0c;均值分类有哪些&#xff1f; 算术均值&#xff1a;平均值&#xff0c;所有数值加总后除以数值的个数 几何均值&#xff1a;所有数值相乘后&#xff0c;再取其n次方根&#xff0c;n是数值的个数 调和均值&#xff1a;是数值倒数的算术均值的倒数 加…

细说ARM MCU中的MX_GPIO_Init()函数的实现过程

目录 1、建立.ioc工程 2、 MX_GPIO_Init()函数 &#xff08;1&#xff09;MX_GPIO_Init()函数的类型 &#xff08;2&#xff09;MX_GPIO_Init()函数中用到的结构体变量 &#xff08;3&#xff09;MX_GPIO_Init()函数使能时钟 &#xff08;4&#xff09;MX_GPIO_Init()函数…

vue3学习使用笔记

1.学习参考资料 vue3菜鸟教程&#xff1a;https://www.runoob.com/vue3/vue3-tutorial.html 官方网站&#xff1a;https://cn.vuejs.org/ 中文文档: https://cn.vuejs.org/guide/introduction.html Webpack 入门教程&#xff1a;https://www.runoob.com/w3cnote/webpack-tutor…

Proteus 安装报错There is a problem with this Windows lnstaller package

Proteus 安装常见问题 1.安装秘钥(许可证)的时候报错 报错信息如下所示&#xff1a; There is a problem with this Windows lnstaller package. A program required for this instalt to compiete coutd notbe run,contact your support personnet or packagevendor. 这个是…

在Ubuntu乌班图上安装Docker

最近在学习乌班图相关的内容&#xff0c;找了一些文档安装的都是报错的&#xff0c;于是记录一下学习过程&#xff0c;希望也能帮助有缘人&#xff0c;首先查看乌班图的系统版本&#xff0c;我的是如下的&#xff1a; cat /proc/version以下是在Ubuntu 20.04版本上安装Docker。…

Apache Druid 代码执行(CVE-2021-25646)漏洞复现

Druid简介与漏洞成因 Apache Druid是一个高性能的实时分析型数据库&#xff0c;旨在对大型数据集进行快速查询分析。Druid最常被当做数据库来用以支持实时摄取、高性能查询和高稳定运行的应用场景&#xff0c;同时&#xff0c;Druid也通常被用来助力分析型应用的图形化界面&am…

3---C++之list(逻辑梳理、简单使用演示、部分源码实现)

一、先决知识点1——认识list&#xff1a; list底层实现是双向链表&#xff0c;但是不是循环链表。list是否使用哨兵节点&#xff0c;是细节问题&#xff0c;C标准并未规定。list是链表&#xff0c;他的优势在于对节点的操作会十分灵活&#xff0c;因此它在需要频繁插入和删除元…

【UnityShader入门精要学习笔记】第十六章 Unity中的渲染优化技术 (下)

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 我的GitHub仓库 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 减少需要处…

德人合科技——天锐绿盾内网安全管理软件 | -文档透明加密模块

天锐绿盾文档加密功能能够为各种模式的电子文档提供高强度加密保护&#xff0c;丰富的权限控制以及灵活的应用管理&#xff0c;帮助企业构建更严密的立体保密体系。 PC地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee ————…

Chatglm3-6b报错处理

目录 AttributeError: ChatGLMTokenizer object has no attribute sp_tokenizer AttributeError: ChatGLMConfig object has no attribute max_sequence_length AttributeError: ChatGLMConfig object has no attribute position_encoding_2d AttributeError: ChatGLMConfi…

BioVendor—sHLA-G ELISA试剂盒

人类白细胞抗原-G (HLA-G)与其他MHC类基因的不同之处在于它的低多态性和产生七种HLA-G蛋白的选择性剪接&#xff0c;这些蛋白的组织分布局限于正常的胎儿和成人组织&#xff0c;这些组织对先天和后天免疫细胞都具有耐受性。可溶性HLA-G是一种免疫抑制分子&#xff0c;诱导活化的…

详细解析Barlow Twins:自监督学习中的创新方法

首先先简单了解一下机器学习中&#xff0c;主要有三种学习范式&#xff1a;监督学习、无监督学习和自监督学习&#xff1a; 监督学习&#xff1a;依赖带标签的数据&#xff0c;通过输入输出映射关系进行训练。无监督学习&#xff1a;不依赖标签&#xff0c;关注数据的内在结构…

pikachu靶场(unsafe upfileupload(文件上传)通关教程)

目录 client check 1.在桌面新建一个文本文档 2.保存为.png格式 3.打开网站 4.按照图中操作 5.点击forward 6.访问 MIME type 1.新建一个php文件&#xff0c;里面写上 2.上传文件&#xff0c;就是我们保存的文件 3.打开抓包工具&#xff0c;点击开始上传 4.修改Conen…

ADC数模转换器

一、ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 1、ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁 2、12位逐次逼近型ADC&#xff0c;1us转换时间 3、输入电压范围&#xff1a;0~3.3V&a…

20分钟快速入门SQL

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是一种专门用来管理和操作关系型数据库的编程语言。以下是SQL入门的一些基础概念和教程&#xff1a; 1. SQL基础 数据库&#xff08;Database&#xff09;&#xff1a;存储数据的集合。表&am…

【K8s】专题四(2):Kubernetes 控制器之 Deployment

以下内容均来自个人笔记并重新梳理&#xff0c;如有错误欢迎指正&#xff01;如果对您有帮助&#xff0c;烦请点赞、关注、转发&#xff01;欢迎扫码关注个人公众号&#xff01; 目录 一、基本介绍 二、工作原理 三、相关特性 四、资源清单&#xff08;示例&#xff09; 五…

C-数据结构-平衡二叉树

平衡二叉树&#xff08;Balanced Binary Tree&#xff09;是一种二叉树&#xff0c;其中任意节点的两棵子树的高度差不超过 1。也可以说是一棵空树或者左右子树高度差不超过 1 的二叉树。 特点和性质 高度平衡&#xff1a;平衡二叉树是一种高度平衡的二叉树&#xff0c;任意节…

Java进阶指南:高级面试问题与精辟解答(六)

Java 面试问题及答案 1. 请解释 Java 中的多线程概念&#xff0c;并说明如何实现一个简单的多线程程序&#xff1f; 答案&#xff1a; 多线程是 Java 中的一个核心概念&#xff0c;它允许同时执行多个任务&#xff0c;从而提高程序的效率和响应性。在 Java 中&#xff0c;可以…

Golang获取文件名扩展名/后缀

在Go语言中&#xff0c;可以使用path/filepath 标准库中的Ext函数来获取文件的扩展名&#xff08;也就是后缀&#xff09;。以下是一个简单的示例代码&#xff1a; package mainimport ("fmt""path/filepath" )func main() {fileName : "example.txt…