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

剑指 Offer 57. 和为s的两个数字

一、题目

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]

示例 2:

输入:nums = [10,26,30,31,47,60], target = 40
输出:[10,30] 或者 [30,10]

限制:

1 <= nums.length <= 10^5
1 <= nums[i] <= 10^6

二、题目分析&解题思路

2.1 从头往后遍历法

有没有人和我一样,想着从头往后遍历,例如 第一个用例
2,7,11,15
依次把每个数字 与 target - nums[i] 存到 map 里
存成这样:
2,7
7,2

例如先 存 2,7
再遍历 7 时 计算 target - 7 = 2 ,再去用 map.find(2); 找到了即可
否则继续往后遍历

代码实现:

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {map<int, int> mapTemp;for(int i = 0; i < nums.size(); i++){if(nums[i] > target){break;}int iTemp = target - nums[i];if(mapTemp.find(iTemp) == mapTemp.end()){mapTemp.insert(make_pair(nums[i], iTemp));}else{nums.resize(0);auto iter = mapTemp.find(iTemp);nums.push_back(iter->first);nums.push_back(iter->second);break;}}return nums;}
};

在这里插入图片描述
虽然过了但是可以看到,所耗时间和所额外开辟的空间都非常大,这代码还不如不写
时间复杂度:常规遍历 O(N) 加上每一次的 map.find nLog(n) ,还额外开辟了map 存储 2N的空间,太鸡肋了,完全忽略了 升序这一个特点;
因此可以考虑使用双指针法

2.2 双指针遍历法

以示例 1 的用例来看,数组是升序,左小右大,那么只需要做如下操作:
在这里插入图片描述
代码实现:

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int left = 0;int right = nums.size() -1;while(left < right){if((nums[left] + nums[right]) > target){//说明右边的数字太大了right--;}else if((nums[left] + nums[right]) < target){//说明左边的数字太小了left++;}else{nums[0] = nums[left];nums[1] = nums[right];nums.resize(2);break;}}return nums;}
};

在这里插入图片描述
是不是立马好了一点,但是感觉还是很慢,还有没有优化的空间呢?

2.3 缩减范围+双指针法

我们继续来看 这一组用例
2 7 11 15
target = 9;
用双指针的话,其实 11 15 这两个数字完全没有必要去遍历,因为 其 已经 大于 target 了。且题目已经告知
在这里插入图片描述
说明没有负数,那么说明这一部分可以舍去,可以做一个裁剪,把范围缩小,把多余的右部分数组元素舍去,减少 双指针法的 right 区间,降低时间复杂度。

    int GetRightIndex(vector<int>& nums, int target){int left = 0;int right = nums.size()-1;while(left < right){int mid = (left + right) /2;if(nums[mid] < target){left = mid + 1;}if(nums[mid] >= target){right = mid;}}return right;}

可以看到速度有效提升
在这里插入图片描述

三、代码实现

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int left = 0;int right = GetRightIndex(nums, target);while(left < right){if((nums[left] + nums[right]) > target){//说明右的数字太大了right--;}else if((nums[left] + nums[right]) < target){//左边的数字太小了left++;}else{nums[0] = nums[left];nums[1] = nums[right];nums.resize(2);break;}}return nums;}int GetRightIndex(vector<int>& nums, int target){int left = 0;int right = nums.size()-1;int mid = 0;while(left < right){mid = (left + right) /2;if(nums[mid] < target){left = mid + 1;}if(nums[mid] >= target){right = mid;}}return right;}
};

在这里插入图片描述

相关文章:

剑指 Offer 57. 和为s的两个数字

一、题目 输入一个递增排序的数组和一个数字s&#xff0c;在数组中查找两个数&#xff0c;使得它们的和正好是s。如果有多对数字的和等于s&#xff0c;则输出任意一对即可。 示例 1&#xff1a; 输入&#xff1a;nums [2,7,11,15], target 9 输出&#xff1a;[2,7] 或者 [7…...

PDF转word在线转换方法!操作简单又高效

相信很多已经工作的人都知道&#xff0c;PDF文件格式的优点在于兼容性强、安全性高&#xff0c;而且查看和传输给他人都很方便。但是&#xff0c;这种格式的文件也有不太方便的地方&#xff0c;那就是不能对文件内容进行编辑和修改。对于许多人来说&#xff0c;如果想要编辑修改…...

Jquery项目中使用vue.js

大家在工作的情况中&#xff0c;可能会遇到之前的老项目采用jq书写&#xff0c;或者修改或者新增功能在jq中&#xff0c;原始jq的项目,代码可维护性很差,一个页面几千行jq,可维护性很差,工作量巨大&#xff0c;所以这个时候大家可以引入vue.js。 第一步&#xff1a;引入vue.js…...

蓝桥杯 删除字符

题目描述 给定一个单词&#xff0c;请问在单词中删除 t 个字母后&#xff0c;能得到的字典序最小的单词是什么&#xff1f; 输入描述 输入的第一行包含一个单词&#xff0c;由大写英文字母组成。 第二行包含一个正整数 t。 其中&#xff0c;单词长度不超过 100&#xff0c…...

析构函数 对象数组 对象指针

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章 &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下定决心去做” &#x1…...

Vue对Axios网络请求进行封装

一、为什么要对网络请求进行封装&#xff1f; 因为网络请求的使用率实在是太高了&#xff0c;我们有的时候为了程序的一个可维护性&#xff0c;会把同样的东西放在一起&#xff0c;后期找起来会很方便&#xff0c;这就是封装的主要意义。 二、如何进行封装&#xff1f; 1、将…...

Android framework HAL(HIDL)

简述 当你在Android系统中使用不同的硬件设备&#xff08;例如摄像头、传感器、音频设备等&#xff09;时&#xff0c;你需要与硬件抽象层&#xff08;HAL&#xff09;进行通信。 HAL是一个中间层&#xff0c;它充当了硬件和应用程序之间的桥梁。但是&#xff0c;由于硬件设备…...

QML 模型(ListModel)

LIstModel&#xff08;列表模型&#xff09; ListModel 是ListElement定义的简单容器&#xff0c;每个定义都包含数据角色。内容可以在 QML 中动态定义或显式定义。 属性&#xff1a; count模型中数据条目的数量dynamic动态角色&#xff0c;默认情况下&#xff0c;角色的类型…...

你还在调戏AI,有的公司已经用ChatGPT开展业务了

近日&#xff0c;OpenAI 正式宣布开放 ChatGPT 和 Whisper 两个模型的 API&#xff0c;API 版本的ChatGPT 不仅功能更多、性能更强&#xff0c;而且还更便宜一一相当于目前 GPT-3 模型价格打一折!划重点OpenAl正式开放 ChatGPT 和 Whisper 模型的 API&#xff0c;目前 SnapChat…...

DatenLord前沿技术分享 No.20

达坦科技专注于打造新一代开源跨云存储平台DatenLord&#xff0c;致力于解决多云架构、多数据中心场景下异构存储、数据统一管理需求等问题&#xff0c;以满足不同行业客户对海量数据跨云、跨数据中心高性能访问的需求。喷泉码具有极高的纠错能力&#xff0c;且具有低延迟、地复…...

基于vivado(语言Verilog)的FPGA学习(1)——了解viviado面板和编译过程

基于vivado&#xff08;语言Verilog&#xff09;的FPGA学习&#xff08;1&#xff09;——了解程序面板和编译过程 每日废话&#xff1a;最近找实习略微一些焦虑&#xff0c;不想找软件开发&#xff0c;虽然有些C和python基础&#xff08;之前上课学的&#xff09;&#xff0c;…...

PACS(CT、CR、DR、MR、DSA、RF医院影像管理系统源码)

PACS具体功能介绍&#xff1a; 病人、采集、观片、三维、报告、照相、退出、文件、图像采集、观片操作、三维、测量标注、诊断报告、照相打印、统计报表、系统管理、帮助、病人浏览器、选择数据源、打开图像、病人登记、工作列表、采集、打开画廊。 DICOM查询/获取&#xff1a…...

Centos7 安装Mysql8.0

1、到指定目录下下载安装包[rootVM-0-14-centos ~]# cd /usr/local/src2、下载mysql8[rootVM-0-14-centos src]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz3、解压mysql8, 通过xz命令解压出tar包&#xff0c; 然后通过t…...

2023年全国最新道路运输从业人员精选真题及答案18

百分百题库提供道路运输安全员考试试题、道路运输从业人员考试预测题、道路安全员考试真题、道路运输从业人员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 181.某客运企业拥有55辆营运客车&#xff0c;下列关于该企业设置…...

web worker的基本使用案例

文件目录如下 代码按照顺序分别如下 webworker.html <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewpo…...

机器看世界

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…...

18、指数移动平均——EMA

简介 在深度学习中&#xff0c;经常会使用EMA&#xff08;指数移动平均&#xff09;这个方法对模型的参数做平均&#xff0c;以求提高测试指标并增加模型鲁棒。 指数移动平均&#xff08;Exponential Moving Average&#xff09;也叫权重移动平均&#xff08;Weighted Moving…...

用Go快速搭建IM即时通讯系统

WebSocket的目标是在一个单独的持久连接上提供全双工、双向通信。在Javascript创建了Web Socket之后&#xff0c;会有一个HTTP请求发送到浏览器以发起连接。在取得服务器响应后&#xff0c;建立的连接会将HTTP升级从HTTP协议交换为WebSocket协议。由于WebSocket使用自定义的协议…...

2023年江苏省职业院校技能大赛中职网络安全赛项试卷-学生组-任务书

2023年江苏省职业院校技能大赛中职网络安全赛项试卷-学生组-任务书 2023年江苏省职业院校技能大赛中职网络安全赛项试卷-学生组-任务书第一阶段 (300分) [手敲的任务书 点个赞吧]任务一:主机发现与信息收集 (50分)任务二: 应急响应 (60分)任务三:数字取证与分析(80分)任务四:…...

如何使用码匠连接 MariaDB

MariaDB 是一个免费的、开源的关系型数据库管理系统&#xff0c;由 MariaDB 的创始人 Michael Widenius 于 2010 年创建。它基于 MariaDB&#xff0c;但在对数据存储的处理中加入了一些自己的特性。MariaDB 相对于 MariaDB 而言&#xff0c;具有更好的性能和更好的兼容性&#…...

银河麒麟V10 SP1安全基线配置踩坑记:为什么pam_wheel.so的group=wheel参数会失效?

银河麒麟V10 SP1安全基线配置深度解析&#xff1a;从pam_wheel.so失效看系统级安全加固实战 第一次在银河麒麟V10 SP1上配置安全基线时&#xff0c;我盯着终端屏幕足足愣了三分钟。按照多年Linux系统管理经验&#xff0c;我在/etc/pam.d/su中加入了标准的groupwheel参数&#x…...

OpenClaw 配置 scnet API 完整指南 - 被低估的国产大模型 API

OpenClaw 配置 scn# OpenClaw 配置 scnet API 完整指南 写在前面 如果你正在使用 OpenClaw&#xff0c;相信你已经对 AI Agent 有了深入的了解。但在模型选择上&#xff0c;很多人只知道 OpenAI、OpenRouter&#xff0c;却忽视了一个非常优秀的国产选择 —— scnet。 本文将…...

MailHog终极指南:如何快速搭建本地邮件测试环境

MailHog终极指南&#xff1a;如何快速搭建本地邮件测试环境 【免费下载链接】MailHog Web and API based SMTP testing 项目地址: https://gitcode.com/gh_mirrors/ma/MailHog MailHog是一款基于Web和API的SMTP测试工具&#xff0c;能够帮助开发者在本地快速搭建安全高效…...

SeqGPT-560M开源可部署安全实践:SELinux策略配置与容器最小权限原则

SeqGPT-560M开源可部署安全实践&#xff1a;SELinux策略配置与容器最小权限原则 1. 引言&#xff1a;为什么企业级AI部署必须关注安全&#xff1f; 当你把像SeqGPT-560M这样强大的智能信息抽取系统部署到生产环境时&#xff0c;兴奋之余&#xff0c;一个严肃的问题必须摆在首…...

工业能量:01 电源是谁?开关电源 vs UPS

01 电源是谁?开关电源 vs UPS 在工厂里,最昂贵的不是设备,而是“停机一秒的代价”。 咱今天不聊加班不聊绩效,就拉家常聊聊厂里那个最“低调”的英雄——电源系统。 你以为停电就是灯灭了,大家歇会儿喝口水?兄弟,醒醒!在真工业现场,尤其是半导体、汽车总装、医药车间…...

从碎片到全景:基于RDP缓存文件(*.bmc)的自动化取证与图像重构实践

1. 揭开RDP缓存文件的神秘面纱 第一次接触*.bmc文件时&#xff0c;我完全没意识到这些看似普通的缓存文件里藏着这么多秘密。当时正在处理一个内部安全审计项目&#xff0c;需要确认某位离职员工是否通过远程桌面泄露了公司数据。在翻遍常规日志无果后&#xff0c;同事提醒我检…...

提升arduino开发效率:用快马平台一键生成常用工具模块代码

作为一名经常折腾Arduino的开发者&#xff0c;我发现在项目开发中&#xff0c;总有些重复性的代码需要反复编写。最近尝试用InsCode(快马)平台来生成这些常用工具模块&#xff0c;效率提升非常明显。今天就把我的实践心得分享给大家。 I2C设备扫描功能 在连接多个I2C设备时&…...

PyTorch模型性能分析与瓶颈定位:使用PyTorch Profiler工具详解

PyTorch模型性能分析与瓶颈定位&#xff1a;使用PyTorch Profiler工具详解 1. 为什么需要性能分析工具 训练深度学习模型时&#xff0c;我们经常会遇到这样的困惑&#xff1a;为什么模型训练这么慢&#xff1f;是数据加载拖慢了速度&#xff0c;还是计算本身效率低下&#xf…...

拯救你的机械键盘:3步告别按键连击烦恼

拯救你的机械键盘&#xff1a;3步告别按键连击烦恼 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 你是否曾经在打字时突然发现屏幕上出…...

铜钟音乐:告别广告与社交干扰的纯净听歌工具

铜钟音乐&#xff1a;告别广告与社交干扰的纯净听歌工具 【免费下载链接】tonzhon-music 铜钟 (Tonzhon.com): 免费听歌; 没有直播, 社交, 广告, 干扰; 简洁纯粹, 资源丰富, 体验独特&#xff01;(密码重置功能已回归) 项目地址: https://gitcode.com/GitHub_Trending/to/ton…...