LeetCode刷题之一:两数之和

目标:

将LeetCode前300的简单题都刷一遍。将LeetCode Hot100的题都刷了。

两数之和

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

思路

暴力for循环

因为题面上说了,数组中同一个元素在答案里不能重复出现。意思就是,譬如,返回的答案为[0,1],不能返回[0,1]和[1,0]
以此为出发点,当我们开双重for循环时,第一层for循环的i从左到右遍历,第二层的for循环的j就应该在i的右边开始遍历。因为如果j在i的左边开始遍历,那么就相当于重复遍历,因为i就是从左边遍历来的呀(相当于之前遍历情况的i和j对调了)。
时间复杂度:O(n^2)
空间复杂度:O(1)

哈希表

由题意可得,如果答案存在,那么一定是成对存在的。
以此为出发点,除了第一个数直接放入哈希表之外,从数组第二个数开始遍历并同时构造哈希表。假设数组中被遍历的数为x,如果target-x存在于哈希表中,那么说明我们找到了这一对。直接输出即可。如果不存在于哈希表中,那么将x作为key,x在数组中对应的下标作为value,存到哈希表中。

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

C++版本

暴力for循环

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

哈希表

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int len = nums.size();unordered_map<int,int>hashtable;hashtable[nums[0]]=0;for(int i=1;i<len;i++){int another = target-nums[i]; if(hashtable.contains(another)) {int idx=hashtable.find(another)->second;return {i,idx};}else hashtable[nums[i]]=i;}return {};}
};
选择unordered_map的原因

选择umap的原因是查询单个key的效率比map高,一般都能在常数时间内完成。但是查询某一范围内的key比map效率低。

unordered_map和相关用法

构造哈希表一般都用unordered_map
插入元素:map[key]=value
查询key的映射,返回布尔值:map.contains(key)
查询key的映射,找到则返回指向该元素的迭代器,否则返回指向end的迭代器:map.find(key)

vector数组的构造

直接用{值}构造即可。

java版本

暴力for循环

class Solution {public int[] twoSum(int[] nums, int target) {int len=nums.length;for(int i=0;i<len-1;i++){for(int j=i+1;j<len;j++){if(nums[i]+nums[j]==target)return new int[]{i,j};}}return new int[0];}
}
new int[0]

new int[0]表示的是长度为0的空数组,其实null也可以。但是这里空数组会更贴切题意。

new int[]{值}

new int[] {值}可以直接构造数组。

哈希表

class Solution {public int[] twoSum(int[] nums, int target) {int len=nums.length;Map<Integer,Integer>map = new HashMap<>(len-1);map.put(nums[0],0);for(int i=1;i<len;i++){int another = target-nums[i];if(map.containsKey(another)){return new int[]{i, map.get(another)};}map.put(nums[i],i);}return new int[0];}
}
length

注意java中要求数组的长度是直接.length

HashMap相关方法()

可以指定长度构造,也可以不指定长度构造。这里是指定了长度的。
插入元素:map.put(key, value1);
获取元素:map.get(key1);
清空map:map.clear();
查询key的映射,返回布尔值:map.containsKey(key);
查询value的映射,返回布尔值:map.containsValue(value1);

python版本

暴力循环

class Solution(object):def twoSum(self, nums, target):n = len(nums)for i in range(0, n-1):for j in range(i+1, n):if nums[i]+nums[j]==target:return [i,j]return []   
range的使用

别忘了……

哈希表

class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:hashtable = dict()for i, num in enumerate(nums):if target - num in hashtable:return [hashtable[target - num], i]hashtable[nums[i]] = ireturn []
hashtable

哈希表在python中用的是字典实现的。直接用dict()构造即可
查询key的映射:key in hashtabe
插入数据:hashtable[key]=value

字典的构造

直接[key, value]就能构造

enumerate的使用

同时返回数据和数据下标

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

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

相关文章

Scrapy使用和学习笔记

前言 Scrapy是非常优秀的一个爬虫框架&#xff0c;基于twisted异步编程框架。yield的使用如此美妙。基于调度器&#xff0c;下载器可以对scrapy扩展编程。插件也是非常丰富&#xff0c;和Selenium&#xff0c;PlayWright集成也比较轻松。 当然&#xff0c;对网页中的ajax请求…

算法打卡01——求两数之和

题目&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你…

NtripShare Caster高精度定位CORS服务软件

NtripShare CORS是NtripShare GNSS系列软件中最早的软件系统&#xff0c;也是NtripShare名称的起源。 所谓GNSS CORS服务系统一般构成&#xff1a; 1&#xff09;基准站网&#xff1a;由若干个分布合理的GNSS 基准站组成&#xff1b; 2&#xff09;数据传输系统&#xff1a;…

贰[2],OpenCV函数解析

1&#xff0c;imread&#xff1a;图片读取 CV_EXPORTS_W Mat imread( const String& filename, int flags IMREAD_COLOR );//参数1(filename)&#xff1a;文件地址 //参数2(flags):读取标志 注:ImreadModes&#xff0c;参数2(flags)枚举定义 enum ImreadModes { IMREAD…

Android 接入ttf字体文件

一、业务实现 一些炫酷的App总会加一些App自己的字体。这时候需要找UI提供ttf字体文件。 然后实现 TTF&#xff08;TrueType Font&#xff09;字体文件并将其应用到 TextView。 二、大致流程 将 TTF 字体文件添加到你的 Android 项目中&#xff1a; 将 TTF 文件复制到 res/f…

pandas教程:String Manipulation 字符串处理和正则表达式re

文章目录 7.3 String Manipulation&#xff08;字符串处理&#xff09;1 String Object Methods&#xff08;字符串对象方法&#xff09;2 Regular Expressions&#xff08;正则表达式&#xff09;3 Vectorized String Functions in pandas&#xff08;pandas中的字符串向量化函…

K8S知识点(六)

&#xff08;1&#xff09;资源管理方式1 其他参数 其他参数以json格式显示pod信息 以yaml显示pod信息&#xff1a; 用describe描述容器的详细信息&#xff1a;包括ip啊&#xff0c;镜像啊&#xff0c;端口啊&#xff0c;容器启动经历的历程 创建命名空间Pod&#xff1a; 查询…

Excel文档名称批量翻译的高效方法

在处理大量文件时&#xff0c;我们常常需要借助一些工具来提高工作效率。例如&#xff0c;在需要对Excel文档名称进行批量翻译时&#xff0c;一个方便快捷的工具可以帮助我们省去很多麻烦。今天&#xff0c;我将介绍一款名为固乔文件管家的软件&#xff0c;它能够帮助我们轻松实…

解决 SSLError: HTTPSConnectionPool(host=‘huggingface.co‘, port=443)

看我的回答&#xff1a; https://github.com/huggingface/transformers/issues/17611#issuecomment-1794486960 能问这个问题的都是网络不太好的&#xff0c;你懂的&#xff0c;所以答案全是解决网络的。 得益于这个回答&#xff1a;#17611 (comment) 看了一下代码&#xf…

The valid characters are defined in RFC 7230 and RFC 3986

服務器通過Body 對象接收參數&#xff0c;而客戶端通過param 地址URL傳參數&#xff0c;不能解析。 return axiosHelper<Protocol<ABC[]>>({method: POST,url: ,data: _reqparams: {data: _req}}) public List<InvoiceItem> getAAAA(RequestBody Query quer…

ElementUI-tree拖拽功能与节点自定义

前言 在管理端会遇到多分类时&#xff0c;要求有层次展示出来&#xff0c;并且每个分类有额外的操作。例如&#xff1a;添加分类、编辑分类、删除、拖到分类等。 下面将会记录这样的一个需求实习过程。 了解需求 分类展示按层级展示分类根据特定的参数展示可以操作的按钮&a…

C语言——switch语句判断星期

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int day 0;scanf("请输入1-7之间的整数&#xff1a;%d",&day);switch(day){case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf(&quo…

Java基于springboot开发的景点旅游项目

演示视频 https://www.bilibili.com/video/BV1cj411Y7UK/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 主要功能&#xff1a;用户可浏览搜索旅游景点&#xff08;分为收费和免费景点&#xff09;&#xff0c;购票&#xff08;支持多规格套餐购票&am…

【Node.js入门之—1.1Node.js 简介】

Node.js入门之—1.1Node.js 简介 文章目录 Node.js入门之—1.1Node.js 简介什么是 Node.js错误说法 Node.js 的特点跨平台三方类库自带http服务器非阻塞I/O事件驱动单线程 Node.js 的应用场合适合用Node.js的场合不适合用Node.js的场合弥补Node.js不足的解决方案 什么是 Node.j…

Linux收发包工具

发包工具 sendip 安装 sudo apt-get install sendip使用 #UDP: 从192.168.9.142向192.168.9.132的8889端口发送udp数据包"hello132" sendip -p ipv4 -is 192.168.9.142 -p udp -ud 8889 -d "hello132" 192.168.9.132收包工具 tcpdump 使用 -a #…

springboot(ssm 旅游管理系统 旅游规划平台 Java(codeLW)

springboot(ssm 旅游管理系统 旅游规划平台 Java(code&LW) 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff…

cordova Xcode打包ios以及发布流程(ionic3适用)

第一步 1、申请iOS证书 2、导入证书到钥匙串 第二步 1、xcode配置iOS证书 1.1用Xcode打开你的项目&#xff08;我的Xcode版本是新版&#xff09; 修改如下图 回到基本信息设置界面&#xff0c;Bundie 这项填写&#xff0c;最先创建的那个appid&#xff0c;跟创建iOS描述文件时选…

决策式AI与生成式AI

人工智能中深度学习&#xff0c;是一种受人脑的生物神经网络机制启发&#xff0c;并模仿人脑来解释、处理数据的机器学习技术&#xff0c;它能自动对数据进行特征提取、识别、决策和生成。它可以从不同的维度进行划分&#xff0c;如果按模型的特点来划分可分为决策式AI和生成式…

2023年中国金融控股公司研究报告

第一章 行业概况 1.1 定义 金融控股公司这一术语最初源自美国&#xff0c;特别是在美国的《金融服务法案》关于银行控股公司组织结构的条文中&#xff0c;首次出现了“金融控股公司”&#xff08;Financial Holding Company&#xff09;这一法律术语&#xff0c;尽管法案中并…

红黑数原理及存在原因

我红黑树那么牛&#xff0c;你们为什么不用&#xff1f;_哔哩哔哩_bilibili 面试时经常会被问到红黑树&#xff0c;它到底有什么优点呢&#xff1f; 对于查找数据&#xff0c;数组二分查询速度最快&#xff0c;时间复杂度为O(logN)。但是如果增加和删除数据&#xff0c;数组就…