画解算法 1-两数之和
时间:2022-06-24
本文章向大家介绍画解算法 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]
解题方案
思路
- 标签:哈希映射
- 这道题本身如果通过暴力遍历的话也是很容易解决的,时间复杂度在O(n2)
- 由于哈希查找的时间复杂度为O(1),所以可以利用哈希容器map降低时间复杂度
- 遍历数组nums,i为当前下标,每个值都判断map中是否存在
target-nums[i]
的key值 - 如果存在则找到了两个值,如果不存在则将当前的
(nums[i],i)
存入map中,继续遍历直到找到为止 - 如果最终都没有结果则抛出异常
- 时间复杂度:O(n)
代码
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i< nums.length; i++) {
if(map.containsKey(target - nums[i])) {
return new int[] {map.get(target-nums[i]),i};
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("No two sum solution");
}
}
画解
- 13.4 mysql用户管理
- Linux基础(day54)
- 13.3 mysql常用命令
- 13.2 连接mysql
- JDK容器学习之List: CopyOnWriteArrayList,ArrayList,LinkedList对比
- 13.1 设置更改root密码
- 12.23 open_basedir
- JDK容器学习之CopyOnWriteArrayList:线程安全保障机制
- JDK容器学习之LinkedList:底层存储&读写逻辑
- Linux基础(day53)
- 15.4 xshell使用xftp传输文件
- JDK容器学习之ArrayList:底层存储和动态扩容
- Linux基础(day57)
- 15.2/15.3 使用vsftpd搭建ftp
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android WebView实现顶部进度条
- 通过一个简单的例子学习Angular Injection Token工作原理
- Android 自定义球型水波纹带圆弧进度效果(实例代码)
- Android自定义View实现弹幕效果
- 使用Injection Token将字符串类型的参数注入到类的构造函数里
- 联想Y480 ubuntu安装有线驱动
- 通过运行时单步调试弄清楚[(ngModel)]的双向绑定的工作原理
- Shadow Root DOM的一些API
- 【Flutter高级玩法- Flow 】我的位置我做主
- PCMAN FTP STOR命令栈溢出
- 一个基于ngrx的Angular图书搜索应用,带网络请求
- Android利用RecyclerView实现列表倒计时效果
- 【Flutter Unit 重大更新 1 】超好用的组件收藏夹上线
- android特卖列表倒计时卡顿问题的解决方法
- dotnet 多线程禁止同时调用相同的方法 禁止方法重入调用 双检锁的设计