两数之和 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--;
		else
			left++;
	}
	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>返回最终结果即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mac OS 用户开启 80 端口

开启端口 sudo vim /etc/pf.conf # 开放对应端口 pass out proto tcp from any to any port 8080 # 刷新配置文件 sudo pfctl -f /etc/pf.conf sudo pfctl -e获取本机ip地址 ifconfig en0 | grep inet | grep -v inet6 | awk {print $2}访问指定端口

栈和队列题目练习

本节小编选了两道题来加深对栈和队列的认识理解&#xff01; 有效的括号 方法1&#xff1a;直接用栈的结构&#xff08;动态数组&#xff09; 本题可以用栈这个结构来解答&#xff0c;将(,{,[ 左括号压入栈中&#xff0c;然后取出栈顶元素与右括号),},]匹配。不匹配的话&…

【成品设计】基于STM32的智能婴儿床设计

《基于STM32的智能婴儿床设计》 所需器件&#xff1a; 主控&#xff1a;STM32F103C8T6最小系统板。OLED屏幕&#xff1a;显示系统状态等。按键&#xff1a;自动模式和遥控模式切换 。180度舵机模块&#xff1a;通过0度~90度之间摆动模拟婴儿床的摆动。360度舵机模块&#xff…

为什么要使用动态代理IP?

一、什么是动态代理IP&#xff1f; 动态代理IP是指利用代理服务器来转发网络请求&#xff0c;并通过不断更新IP地址来保护访问者的原始IP&#xff0c;从而达到匿名访问、保护隐私和提高访问安全性的目的。动态代理IP在多个领域中都有广泛的应用&#xff0c;能够帮助用户…

函数调用之栈平衡

一&#xff0c;前言 如约而至&#xff0c;献上c/c在调用函数过程中关于栈平衡的心得&#xff0c;帮助大家了解内存中关于栈空间的分配过程&#xff08;ps:栈平衡通常也被说成堆栈平衡&#xff09;&#xff1b; 话不多说&#xff0c;下面以函数 int __cdecl GetResult(int uPa…

【康耐视国产案例】AI视觉相机创新 加速商超物流数智化转型

连锁商超/零售店正面临着因消费者购物习惯改变等挑战&#xff0c;迎来了以新兴技术崛起而催生的数字化物流体系转型需求。物流行业与AI机器视觉的深度融合&#xff0c;解决了传统机器视觉识别速度慢、环境要求高、定制化部署耗时过多等痛点&#xff0c;大大提高了物流供应链的效…

NPDP(New Product Development Professional)

NPDP&#xff08;New Product Development Professional&#xff09; NPDP考试介绍 NPDP证书介绍

邮件大附件发送失败影响业务?看看500强企业是如何解决的

邮箱业务往来对于企业来说是最常见的&#xff0c;因为其便捷性和普遍性&#xff0c;沟通使用成本也是最低的&#xff0c;在多种邮箱中&#xff0c;Outlook邮箱因其专业简洁的使用体验&#xff0c;在全世界范围内被企业广泛使用。 企业邮箱业务往来少不了附件的使用&#xff0c;…

【记忆化搜索 】2312. 卖木头块

本文涉及知识点 记忆化搜索 LeetCode2312. 卖木头块 给你两个整数 m 和 n &#xff0c;分别表示一块矩形木块的高和宽。同时给你一个二维整数数组 prices &#xff0c;其中 prices[i] [hi, wi, pricei] 表示你可以以 pricei 元的价格卖一块高为 hi 宽为 wi 的矩形木块。 每…

Python魔法之旅-魔法方法(03)

目录 一、概述 1、定义 2、作用 二、主要应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类…

SpringMVC框架学习笔记(三):url请求风格-Rest 以及 SpringMVC 映射获取到各种类型数据

1 Rest 基本介绍 1.1 基本说明 REST&#xff1a;即 Representational State Transfer。(资源)表现层状态转化。是目前流行的请求方 式。它结构清晰, 很多网站采用 HTTP 协议里面&#xff0c;四个表示操作方式的动词&#xff1a;GET、POST、PUT、DELETE。它们分别对应四种基本…

Docker 私有仓库部署和管理

目录 一、案例一 概述 二、案例一 前置知识点 2.1、什么是 Docker Compose 2.2、什么是 Consul 三、案例一 使用 docker Compose 搭建 Consul 集群环境 3.1、案例实验环境 3.2、案例需求 四、案例实施 4.1、Docker 网络通信 1&#xff09;端口映射 2&#xf…

SpringMVC响应数据 View

1.如何封装数据返回页面 使用ModelAndView&#xff1a; ModelAndView modelAndView new ModelAndView() modelAndView.addObject() 方法封装数据 使用Controller中内置Model对象 model&#xff1a; model.addAttribute("name","zz"); 2.跳转的方式…

上位机图像处理和嵌入式模块部署(f407 mcu原理图)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们说过&#xff0c;和103相比较&#xff0c;407速度更快、频率更高&#xff0c;而且资源更多&#xff0c;当然可以做的事情也就更多。此外&a…

【小白专用 已验证24.5.30】ThinkPHP6 视图

ThinkPHP6 视图 模板引擎支持普通标签和XML标签方式两种标签定义&#xff0c;分别用于不同的目的 标签类型描述普通标签主要用于输出变量、函数过滤和做一些基本的运算操作XML标签也称为标签库标签&#xff0c;主要完成一些逻辑判断、控制和循环输出&#xff0c;并且可扩展 c…

如何评价GPT-4o?GPT-4o和ChatGPT4.0的区别是啥呢?

如何评价GPT-4o? GPT-4o代表了人工智能领域的一个重要里程碑&#xff0c;它不仅继承了GPT-4的强大智能&#xff0c;还在多模态交互方面取得了显著进步。以下是几个方面的分析&#xff1a; 技术特点 多模态交互能力&#xff1a;GPT-4o支持文本、音频和图像的任意组合输入与输出…

vscode 1.85安装remote-ssh后左侧没有图标

vscode安装remote-ssh插件后左侧没有图标。 解决方法 想要左侧有图标&#xff0c;是另一个插件起作用&#xff1a;Remote Explorer 但是这个插件最新版需要1.87&#xff0c;可以switch to Pre-release version之后就能用了。 其实&#xff0c;最后再switch to Release Versio…

【Python】 如何从列表中移除第一个元素?

基本原理 在Python中&#xff0c;列表是一种非常灵活的数据结构&#xff0c;可以存储一系列的元素。这些元素可以是任何类型&#xff0c;包括数字、字符串、其他列表等。列表中的元素是有序的&#xff0c;并且可以通过索引来访问和修改。 当我们想要从列表中移除第一个元素时…

Spring 源码:深度解析AOP源码配置解析

文章目录 一、 解析AOP配置的入口1.1 从XML配置到AOP Namespace的解析流程1.2 分析注解驱动的AOP配置解析流程 二、AOP配置解析的核心流程2.1 ConfigBeanDefinitionParser 类2.2 parse()2.3 parseAdvisor()2.4 parseAspect()2.5 parsePointcut()2.6 createAdvisorBeanDefinitio…

list 的实现

目录 list 结点类 结点类的构造函数 list的尾插尾删 list的头插头删 迭代器 运算符重载 --运算符重载 和! 运算符重载 * 和 -> 运算符重载 list 的insert list的erase list list实际上是一个带头双向循环链表,要实现list,则首先需要实现一个结点类,而一个结点需要…