当前位置: 首页 > article >正文

leetcode--两数之和 三数之和

1.两数之和

给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列  ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。

以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1  index2

你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。

你所设计的解决方案必须只使用常量级的额外空间。

示例 1:

输入:numbers = [2,7,11,15], target = 9
输出:[1,2]
解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。

示例 2:

输入:numbers = [2,3,4], target = 6
输出:[1,3]
解释:2 与 4 之和等于目标数 6 。因此 index1 = 1, index2 = 3 。返回 [1, 3] 。

示例 3:

输入:numbers = [-1,0], target = -1
输出:[1,2]
解释:-1 与 0 之和等于目标数 -1 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。

提示:

  • 2 <= numbers.length <= 3 * 104
  • -1000 <= numbers[i] <= 1000
  • numbers 按 非递减顺序 排列
  • -1000 <= target <= 1000
  • 仅存在一个有效答案

思考过程:

class Solution {
public:vector<int> twoSum(vector<int>& numbers, int target) {int left=0;int right=numbers.size()-1;while(left<right){if(numbers[left]+numbers[right]==target)return {left+1,right+1};else if(numbers[left]+numbers[right]>target)right-=1;else if(numbers[left]+numbers[right]<target)left+=1;}return {};}
};

2.三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。
class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {//相向双指针:一头一尾//时间复杂度O(n²)//空间复杂度O(1)ranges::sort(nums);//对nums进行升序排序  //sort(nums.begin(),nums.end())vector<vector<int>> ans;//最后输出的结果int n=nums.size();//size的范围更广,length一般针对string//nums[i]+nums[j]+nums[k]==0//nums[i]==nums[j]+nums[k] 转化成两数之和的问题for(int i=0;i<n-2;i++)  //后面的两个位置要留给j和k{//首先考虑i的情况int x=nums[i];if(i>0&&nums[i]==nums[i-1]) continue;//题目不允许重复数字,遇到这个数和上一个数相同,跳出if(x+nums[i+1]+nums[i+2]>0) break;//如果x和其余最小的两个数之和都大于0,那么和其他数的和一定大于0if(x+nums[n-2]+nums[n-1]<0) continue;//如果x和最大的两个数之和都小于0,可以继续枚举x,直至他们之和大于0int j=i+1;     //i    j     kint k=n-1;while(j<k)//与两数之和同理{int s=x+nums[j]+nums[k];if(s>0)k--;else if(s<0)j++;else //三数之和为0{ans.push_back({x,nums[j],nums[k]});  //ans是这样{{结果1},{结果2}, ....}//如果j和k遇到重复数字for(j++;j<k&&nums[j]==nums[j-1];j++);for(k--;k>j&&nums[k]==nums[k+1];k--);}}}return ans;}
};

增加一道练手的课后题:leetcode2824

给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 target ,请你返回满足 0 <= i < j < n 且 nums[i] + nums[j] < target 的下标对 (i, j) 的数目。

示例 1:

输入:nums = [-1,1,2,3,1], target = 2
输出:3
解释:总共有 3 个下标对满足题目描述:
- (0, 1) ,0 < 1 且 nums[0] + nums[1] = 0 < target
- (0, 2) ,0 < 2 且 nums[0] + nums[2] = 1 < target 
- (0, 4) ,0 < 4 且 nums[0] + nums[4] = 0 < target
注意 (0, 3) 不计入答案因为 nums[0] + nums[3] 不是严格小于 target 。

示例 2:

输入:nums = [-6,2,5,-2,-7,-1,3], target = -2
输出:10
解释:总共有 10 个下标对满足题目描述:
- (0, 1) ,0 < 1 且 nums[0] + nums[1] = -4 < target
- (0, 3) ,0 < 3 且 nums[0] + nums[3] = -8 < target
- (0, 4) ,0 < 4 且 nums[0] + nums[4] = -13 < target
- (0, 5) ,0 < 5 且 nums[0] + nums[5] = -7 < target
- (0, 6) ,0 < 6 且 nums[0] + nums[6] = -3 < target
- (1, 4) ,1 < 4 且 nums[1] + nums[4] = -5 < target
- (3, 4) ,3 < 4 且 nums[3] + nums[4] = -9 < target
- (3, 5) ,3 < 5 且 nums[3] + nums[5] = -3 < target
- (4, 5) ,4 < 5 且 nums[4] + nums[5] = -8 < target
- (4, 6) ,4 < 6 且 nums[4] + nums[6] = -4 < target

提示:

  • 1 <= nums.length == n <= 50
  • -50 <= nums[i], target <= 50
class Solution {
public:int countPairs(vector<int>& nums, int target) {sort(nums.begin(),nums.end());int n=nums.size();int left=0;int right=n-1;int count=0;while(left<right){if(nums[left]+nums[right]<target){count+=right-left;left++;}elseright--;}return count;}
};

相关文章:

leetcode--两数之和 三数之和

1.两数之和 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 …...

FFMPEG-视频解码-支持rtsp|rtmp|音视频文件(低延迟)

本人亲测解码显示对比延迟达到7到20毫秒之间浮动兼容播放音视频文件、拉流RTSP、RTMP等网络流 基于 Qt 和 FFmpeg 的视频解码播放器类,继承自 QThread,实现了视频流的解码、播放控制、帧同步和错误恢复等功能 工作流程初始化阶段: 用户设置URL和显示尺寸 调用play()启动线程解…...

openEuler安装nvidia驱动【详细版】

注意&#xff1a;在 openEuler 24.03 LTS 系统中安装 NVIDIA 驱动&#xff08;RTX 3090&#xff09;需要禁用默认的 Nouveau 驱动并手动安装官方驱动。 一、准备工作 系统更新与依赖安装 更新系统并安装必要依赖包&#xff1a;sudo dnf update -y sudo dnf install gcc make k…...

力扣DAY63-67 | 热100 | 二分:搜索插入位置、搜索二维矩阵、排序数组查找元素、搜索旋转排序数组、搜索最小值

前言 简单、中等 √ 二分法思路很简单&#xff0c;但是判断边界太麻烦了&#xff01;难道真的要去背模板吗 搜索插入位置 我的题解 循环条件左不超过右&#xff0c;目标大于中间值&#xff08;向下取整&#xff09;时&#xff0c;左中1&#xff0c;小于&#xff0c;右中-1&…...

基于Python爬虫的豆瓣电影信息爬取(可以根据选择电影编号得到需要的电影信息)

# 豆瓣电影信息爬虫(展示效果如下图所示:) 这是一个功能强大的豆瓣电影信息爬虫程序,可以获取豆瓣电影 Top 250 的详细信息。 ## 功能特点 - 自动爬取豆瓣电影 Top 250 的所有电影信息 - 支持分页获取,每页 25 部电影,共 10 页 - 获取每部电影的详细信息,包括: - 标题…...

程序员思维体操:TDD修炼手册

程序员思维体操&#xff1a;TDD修炼手册 ——从"先写代码"到"测试先行"的认知革命 一、重新认识TDD&#xff1a;不仅仅是写测试 什么是TDD&#xff08;测试驱动开发&#xff09; TDD其实很简单&#xff0c;不要看名字很高级复杂&#xff0c;传统开发是直…...

PHP异常处理__RuntimeException运行时错误

以下是对 PHP 中 RuntimeException 的详细解释&#xff1a; 一、RuntimeException 概述 RuntimeException 是 PHP 内置的异常类&#xff0c;它继承自 Exception 类。它通常用于表示在程序运行时发生的异常情况&#xff0c;这些异常情况通常是在程序正常执行过程中出现的错误&…...

从性能到安全:大型网站系统架构演化的 13 个核心维度

大型网站系统架构的演化是一个复杂的过程&#xff0c;涉及到多个维度的技术内容&#xff0c;从关键维度进行详细分析&#xff1a; 1.性能维度 缓存技术&#xff1a;包括浏览器缓存、CDN&#xff08;内容分发网络&#xff09;缓存、服务器端缓存&#xff08;如 Memcached、Red…...

基于PaddleOCR对图片中的excel进行识别并转换成word优化(二)

0、原图 一、优化地方 计算行的时候&#xff0c;采用概率分布去统计差值概率比较大的即为所要的值。 def find_common_difference(array):"""判断数组中每个元素的差值是否相等&#xff0c;并返回该差值:param array: 二维数组&#xff0c;其中每个元素是一个…...

spring Ai---向量知识库(二)

RAG&#xff1a;检索增强&#xff0c;结合了检索和生成两种技术&#xff1b;用于提升生成模型的效果。 1.信息检索&#xff08;R) &#xff1a;系统从一个大型文档库中检索出与查询最相关的文档片段。这一步的目标是找到那些可能包含答案或相关信息的文档。 2.生成增强&#xf…...

Nvidia显卡架构演进

1 简介 显示卡&#xff08;英语&#xff1a;Display Card&#xff09;简称显卡&#xff0c;也称图形卡&#xff08;Graphics Card&#xff09;&#xff0c;是个人电脑上以图形处理器&#xff08;GPU&#xff09;为核心的扩展卡&#xff0c;用途是提供中央处理器以外的微处理器帮…...

rollup使用讲解

rollup 总结 什么是 rollup? rollup 是一个 JavaScript 模块打包器,在功能上要完成的事和 webpack 性质一样,就是将小块代码编译成大块复杂的代码,例如 library 或应用程序。在平时开发应用程序时,我们基本上选择用 webpack,相比之下,rollup.js 更多是用于 library 打…...

USO服务器操作系统手动升级GCC 12.2.0版本

1. 从 GNU 官方 FTP 服务器下载 GCC 12.2.0 的源码包&#xff0c;并解压进入源码目录。 wget https://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.gz tar -zxvf gcc-12.2.0.tar.gz cd gcc-12.2.0 2. 运行脚本下载并配置 GCC 编译所需的依赖库。此步骤会自动下载如 GMP…...

STM32F407使用ESP8266实现阿里云OTA(上)

文章目录 前言一、阿里云OTA二、命令调试1.升级包上传2.OTA订阅和上报的主题3.命令调试4.具体效果三、所用到的工具和材料前言 在经过前面对ESP8266、SD卡、FLASH的了解之后,终于要进入我们的正题了,就是使用STM32和ESP8266实现阿里云的OTA。这一功能并不复杂,只是需要主要…...

玩转Docker | 使用Docker部署DashMachine个人书签工具

玩转Docker | 使用Docker部署DashMachine个人书签工具 前言一、DashMachine介绍DashMachine简介DashMachine使用场景二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署DashMachine服务下载镜像创建容器创建容器检查容器状态检查服务端口安全设置四、访问Das…...

测试基础笔记第九天

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、数据类型和约束1.数据类型2.约束3.主键4.不为空5.唯一6.默认值 二、数据库操作1.创建数据库2.使用数据库3.修改数据库4.删除数据库和查看所有数据库5.重点&…...

使用n8n构建自动化工作流:从数据库查询到邮件通知的使用指南

n8n是一款强大的开源工作流自动化工具&#xff0c;可以帮助你将各种服务和应用程序连接起来&#xff0c;创建复杂的自动化流程。下面我将详细介绍一个实用的n8n用例&#xff1a;从MySQL数据库查询数据并发送邮件通知&#xff0c;包括使用场景、搭建步骤和节点部署方法。 使用场…...

Python爬虫与代理IP:高效抓取数据的实战指南

目录 一、基础概念解析 1.1 爬虫的工作原理 1.2 代理IP的作用 二、环境搭建与工具选择 2.1 Python库准备 2.2 代理IP选择技巧 三、实战步骤分解 3.1 基础版&#xff1a;单线程免费代理 3.2 进阶版&#xff1a;多线程付费代理池 3.3 终极版&#xff1a;Scrapy框架自动…...

Unity 将Excel表格中的数据导入到Mysql数据表中

1.Mysql数据表users如下&#xff1a; 2.即将导入的Excel表格如下&#xff1a; 3.代码如下&#xff1a; using System; using System.Data; using System.IO; using Excel; using MySql.Data.MySqlClient; using UnityEngine; using UnityEditor;public class ImportExcel {// …...

JavsScript 原型链

解决构造函数浪费内存的问题 每一个构造函数都有一个属性prototype属性&#xff0c;指向一个原型对象 原型是构造函数的一个属性 prototype 给数组类型扩展 正常代码&#xff1a; prototype中的this指向为调用对象 所以 基本关系&#xff1a;构造函数产生两个部分&…...

MySQL 索引:深度解析与高效使用

MySQL 索引:深度解析与高效使用 引言 MySQL 是一种广泛使用的开源关系型数据库管理系统,其强大的功能和性能使其成为众多应用程序的首选数据库。在 MySQL 中,索引是提高查询效率的关键因素之一。本文将深入探讨 MySQL 索引的概念、类型、创建、优化以及注意事项,帮助您更…...

消息中间件RabbitMQ02:账号的注册、点对点推送信息

一、默认用户登录和账号注册 1.登录 安装好了RMQ之后&#xff0c;我们可以访问如下地址&#xff1a; RabbitMQ Management 输入默认的管理员密码&#xff0c;4.1.0的管理员账号和密码是&#xff1a; guest guest 2.添加账号 consumer consumer 添加成功后&#xff1a; 角色…...

大语言模型的评估指标

目录 一、混淆矩阵 1. 混淆矩阵的结构&#xff08;二分类为例&#xff09; 2.从混淆矩阵衍生的核心指标 3.多分类任务的扩展 4. 混淆矩阵的实战应用 二、分类任务核心指标 1. Accuracy&#xff08;准确率&#xff09; 2. Precision&#xff08;精确率&#xff09; 3. …...

Python 设计模式:模板模式

1. 什么是模板模式&#xff1f; 模板模式是一种行为设计模式&#xff0c;它定义了一个操作的算法的骨架&#xff0c;而将一些步骤延迟到子类中。模板模式允许子类在不改变算法结构的情况下&#xff0c;重新定义算法的某些特定步骤。 模板模式的核心思想是将算法的固定部分提取…...

HSTL详解

一、HSTL的基本定义 HSTL&#xff08;High-Speed Transceiver Logic&#xff09; 是一种针对高速数字电路设计的差分信号接口标准&#xff0c;主要用于高带宽、低功耗场景&#xff08;如FPGA、ASIC、高速存储器接口&#xff09;。其核心特性包括&#xff1a; 差分信号传输&…...

好用————python 库 下载 ,整合在一个小程序 UIUIUI

上图~ import os import time import threading import requests import subprocess import importlib import tkinter as tk from tkinter import ttk, messagebox, scrolledtext from concurrent.futures import ThreadPoolExecutor, as_completed from urllib.parse im…...

OpenVINO教程(五):实现YOLOv11+OpenVINO实时视频目标检测

目录 实现讲解效果展示完整代码 本文作为上篇博客的延续&#xff0c;在之前实现了图片推理的基础上&#xff0c;进一步介绍如何进行视频推理。 实现讲解 首先&#xff0c;我们需要对之前的 predict_and_show_image 函数进行拆分&#xff0c;将图像显示与推理器&#xff08;pre…...

CentOS的安装以及网络配置

CentOS的下载 在学习docker之前&#xff0c;我们需要知道的就是docker是运行在Linux内核之上的&#xff0c;所以我们需要Linux环境的操作系统&#xff0c;当然了你也可以选择安装ubuntu等操作系统&#xff0c;如果你不想在本机安装的话还可以考虑买阿里或者华为的云服务器&…...

【初级】前端开发工程师面试100题(一)

本题库共计包含100题&#xff0c;考察html&#xff0c;css&#xff0c;js&#xff0c;以及react&#xff0c;vue&#xff0c;webpack等基础知识掌握情况。 HTML基础篇 说说你对HTML语义化的理解&#xff1f; 语义化就是用合适的标签表达合适的内容&#xff0c;比如<header&…...

eplan许可证与防火墙安全软件冲突

在使用EPLAN电气设计软件时&#xff0c;有时会遇到许可证与防火墙或安全软件之间的冲突。这种冲突可能导致许可证无法激活或软件无法正常运行&#xff0c;给用户带来诸多不便。本文将为您解析EPLAN许可证与防火墙/安全软件冲突的原因&#xff0c;并提供解决方案&#xff0c;帮助…...