leetcode 1.两数之和

题目

链接:https://leetcode-cn.com/problems/two-sum

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

C++代码

暴力解法1

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> r;for(int i = 0; i < nums.size() - 1; ++i){for(int j = i+1; j < nums.size(); ++j){if(nums[i] + nums[j] == target){r.push_back(i);r.push_back(j);return r;}}}return {};}
};

执行用时: 180 ms, 在所有 C++ 提交中击败了 42.70% 的用户

内存消耗: 11.5 MB, 在所有 C++ 提交中击败了 5.04% 的用户

暴力解法2

即使是暴力解法,上面的实现中也存在一个显著的优化点

当nums[i]确定时,我们可以提前把差值算好,而不是每次都去计算 nums[i] + nums[j] == target

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> r;for(int i = 0; i < nums.size() - 1; ++i){int res = target - nums[i];for(int j = i+1; j < nums.size(); ++j){if(nums[j] == res){r.push_back(i);r.push_back(j);return r;}}}return r;}
};

执行用时: 164 ms, 在所有 C++ 提交中击败了 45.01% 的用户

内存消耗: 11.3 MB, 在所有 C++ 提交中击败了 5.04% 的用户

哈希表解法

这道题最优的解法应该是哈希表

时间复杂度:O(n), 空间复杂度:O(n)

设置一个 map 容器 record 用来记录元素的值与索引,然后遍历数组 nums。

每次遍历时使用临时变量 res 用来保存目标值与当前值的差值

在此次遍历中查找 record ,查看是否有与 res 一致的值,如果查找成功则返回查找值的索引值与当前变量的值 i

如果未找到,则在 record 保存该元素与索引值 i

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> record;for(int i = 0; i < nums.size(); ++i){int res = target - nums[i];if(record.find(res) != record.end()){int r[] = {i, record[res]};return vector<int>(r, r+2);}record[nums[i]] = i;}return {};}
};

执行用时: 4 ms, 在所有 C++ 提交中击败了 99.75% 的用户

内存消耗: 12.1 MB, 在所有 C++ 提交中击败了 5.04% 的用户

Python3代码

python 哈希表解法

class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:hashmap={}for i,num in enumerate(nums):if hashmap.get(target - num) is not None:return [i,hashmap.get(target - num)]hashmap[num] = i #这句不能放在if语句之前,解决list中有重复值或target-num=num的情况

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

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

相关文章

C语言学习及应用笔记之二:C语言static关键字及其使用

C语言有很多关键字&#xff0c;大多关键字使用起来是很明确的&#xff0c;但有一些关键字却要相对复杂一些。我们这里要说明的static关键字就是如此&#xff0c;它的功能很强大&#xff0c;相应的使用也就更复杂。 一般来说static关键字的常见用法有三种&#xff1a;一是用作局…

μCUnit,微控制器的单元测试框架

在MCU on Eclipse网站上看到Erich Styger在8月26日发布的博文&#xff0c;一篇关于微控制器单元测试的文章&#xff0c;有很高的参考价值&#xff0c;特将其翻译过来以备学习。原文网址&#xff1a;https://mcuoneclipse.com/2018/08/26/tutorial-%CE%BCcunit-a-unit-test-fram…

leetcode No.15-16 三数之和相关问题

leetcode 15. 三数之和 题目 链接&#xff1a;https://leetcode-cn.com/problems/3sum 给定一个包含 n 个整数的数组 nums&#xff0c;判断 nums 中是否存在三个元素 a&#xff0c;b&#xff0c;c &#xff0c;使得 a b c 0 &#xff1f;找出所有满足条件且不重复的三元组…

PID控制器开发笔记之十一:专家PID控制器的实现

前面我们讨论了经典的数字PID控制算法及其常见的改进与补偿算法&#xff0c;基本已经覆盖了无模型和简单模型PID控制经典算法的大部。再接下来的我们将讨论智能PID控制&#xff0c;智能PID控制不同于常规意义下的智能控制&#xff0c;是智能算法与PID控制算法的结合&#xff0c…

leetcode No.123 买卖股票的最佳时机 III

题目 链接&#xff1a;https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意: 你不能同时参与多…

Modbus协议栈开发笔记之七:Modbus ASCII Slave开发

与Modbus RTU在串行链路上分为Slave和Master一样&#xff0c;Modbus ASCII也分为Slave和Master&#xff0c;这一节我们就来开发Slave。对于Modbus ASCII从站来说&#xff0c;需要实现的功能其实与Modbus RTU的Slave是一样的。其操作过程也是一样的。首先接收到主站的访问命令&a…

leetcode No.21 合并两个有序链表

题目 链接&#xff1a;https://leetcode-cn.com/problems/merge-two-sorted-lists 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例&#xff1a; 输入&#xff1a;1->2->4, 1->3->4 输出&#xff1a;1-&…

Modbus协议栈开发笔记之八:Modbus ASCII Master开发

这一节我们来封装Modbus ASCII Master应用&#xff0c;Modbus ASCII主站的开发与RTU主站的开发是一致的。同样的我们也不是做具体的应用&#xff0c;而是实现ASCII主站的基本功能。我们将ASCII主站的功能封装为函数&#xff0c;以便在开发具体应用时调用。 对于ASCII主站我们主…

leetcode No.83 删除排序链表中的重复元素

题目 链接&#xff1a;https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list 给定一个排序链表&#xff0c;删除所有重复的元素&#xff0c;使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3-&…

在Eclipse中使用Git

本文原文出自MCU on Eclipse网站&#xff0c;作者为Erich Styger&#xff0c;原文网址&#xff1a;https://mcuoneclipse.com/2018/09/30/tutorial-git-with-eclipse/。本人翻译了此篇文章&#xff0c;有些短语难以找到准确表达的中文词语&#xff0c;所以保持了原文。限于个人…

leetcode No.141 环形链表

题目 链接&#xff1a;https://leetcode-cn.com/problems/linked-list-cycle 给定一个链表&#xff0c;判断链表中是否有环。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从 0 开始&#xff09;。 如果 pos 是 -1&…

C语言学习及应用笔记之三:C语言const关键字及其使用

在C语言程序中&#xff0c;const关键字也是经常会用到的一个关键字&#xff0c;那么使用const关键字的目的是什么呢&#xff1f;事实上&#xff0c;在程序中使用const关键字的主要目的就是为了向使用者传递设计者的一些意图。 事实上&#xff0c;无论我们是使用const关键字声明…

leetcode No.2 两数相加

题目 链接&#xff1a;https://leetcode-cn.com/problems/add-two-numbers 给出两个 非空 的链表用来表示两个非负的整数。其中&#xff0c;它们各自的位数是按照 逆序 的方式存储的&#xff0c;并且它们的每个节点只能存储 一位 数字。 如果&#xff0c;我们将这两个数相加…

nlp cs224n 学习笔记1 Introduction and Word Vectors

注&#xff1a;个人笔记&#xff0c;价值有限&#xff0c;不建议逗留。 word embedding 的意义和目的&#xff1f; 通过一种映射&#xff0c;将自然语言中的单词&#xff0c;嵌入到n维欧式空间中&#xff0c;得到可以用数学语言表达并用计算机计算的“词向量”。 同时我们希望…

Modbus协议栈开发笔记之一:实现功能的基本设计

Modbus作为开放式的工业通讯协议&#xff0c;在各种工业设备中应用极其广泛。本人也使用Modbus通讯很多年了&#xff0c;或者用现成的&#xff0c;或者针对具体应用开发&#xff0c;一直以来都想要开发一个比较通用的协议栈能在后续的项目中复用&#xff0c;而不必每次都写一遍…

天池CV学习赛:街景字符识别-思路与上分技巧汇总

Datawhale 和 天池 合作的零基础入门CV - 街景字符编码识别比赛的正式赛已经结束。本文对一些比赛思路和上分技巧进行了汇总和整理&#xff0c;希望对大家深入学习CV能够有帮助。 本文分为以下几部分&#xff1a; 如何优化官方baseline的效果&#xff1f; 其它解题思路的整理…

Modbus协议栈开发笔记之二:Modbus消息帧的生成

前面我们已经对Modbus的基本事务作了说明&#xff0c;也据此设计了我们将要实现的主从站的操作流程。这其中与Modbus直接相关的就是Modbus消息帧的生成。Modbus消息帧也是实现Modbus通讯协议的根本。 1、Modbus消息帧分析 MODBUS协议在不同的物理链路上的消息帧有一些差异&am…

动手学CV-目标检测入门教程:基本概念

3.1 目标检测基本概念 本文来自开源组织 DataWhale &#x1f433; CV小组创作的目标检测入门教程。 对应开源项目 《动手学CV-Pytorch》 的第3章的内容&#xff0c;教程中涉及的代码也可以在项目中找到&#xff0c;后续会持续更新更多的优质内容&#xff0c;欢迎⭐️。 如果使…

动手学CV-目标检测入门教程2:VOC数据集

3.2 目标检测数据集VOC 本文来自开源组织 DataWhale &#x1f433; CV小组创作的目标检测入门教程。 对应开源项目 《动手学CV-Pytorch》 的第3章的内容&#xff0c;教程中涉及的代码也可以在项目中找到&#xff0c;后续会持续更新更多的优质内容&#xff0c;欢迎⭐️。 如果…

C语言学习及应用笔记之四:C语言volatile关键字及其使用

在C语言中&#xff0c;还有一个并不经常使用但却非常有用的关键字volatile。那么使用volatile关键字究竟能干什么呢&#xff1f;接下来我将就此问题进行讨论。 一个使用volatile关键字定义变量&#xff0c;其实就是告诉编译系统这变量可能会被意想不到地改变。那么编译时&…