IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode第一题:两数之和(Java) -> 正文阅读

[数据结构与算法]LeetCode第一题:两数之和(Java)


前言

坚持下去便可胜利。只要心还在,梦想还在,我们还可以坚持直至胜利。没有过不去的坎,只有害怕的心。莫害怕,抓住希望便可突破困境找到方向!

随着对框架学习的不断深入以及项目经验的不断积累,愈发的意识到掌握基本算法逻辑的必要性,因此决定每天在LeetCode上面刷一道算法逻辑题并在此记录。


一、题目内容

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

示例1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例3:

输入:nums = [3,3], target = 6
输出:[0,1]

提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

代码模板:

class Solution {
    public int[] twoSum(int[] nums, int target) {

    }
}

二、解题过程

在看到题之后下意识的想到了利用暴力for循环来解决这道题,但是暴力for循环对于这道题来说虽然可以运行出正确的结果,但是对于时间复杂度来说就很慢,于是想到了利用哈希表来解决这道题。

1. 解题思路

题目的目的是寻找数组中和为target的两个元素,因此想到了可以在向哈希表中添加元素的同时进行遍历,即对哈希表边添加边遍历。(本题中哈希表的键和值均为Integer类型)

首先利用for循环对传来的数组进行遍历,在遍历的过程中向哈希表添加元素,向哈希表添加元素的方式为将数组的值作为哈希表的key(即哈希表的键),将数组当前元素的索引作为哈希表的value(即哈希表的值)。索引在遍历数组的for循环中增加一条判断:如果存在数值上等于target-数组中当前元素值的索引,就将该索引对应的value取出(即将数组中该元素对应的下标取出),此时将获取到的value与当前遍历到的数组元素的下标同时放到一个整型数组中并返回。

2. 解题代码

代码如下(示例):

class Solution {
    public int[] twoSum(int[] nums, int target) {
		// 创建出哈希表用来存储数据
		// 在存储时将哈希表的键与值相反存储,key的位置存储元素的值,value的位置存储索引
		Map<Integer, Integer> hashMap = new HashMap<>();
		// 在循环的过程中边遍历边存储
		for (int i = 0; i < nums.length; i++) {
			// 如果哈希表的键值中存在键值等于target - 数组中第i个值的数据,则获取该key对应的value
			// 此时获取到的value为传入数组中的下标
			if (hashMap.containsKey(target - nums[i])) {
				return new int[] {hashMap.get(target - nums[i]),i};
			}
			// 第一个数据中没有匹配的,将数组中元素的值保存为key,元素的索引保存为value
			hashMap.put(nums[i], i);
		}
		// 不会执行到这一步,如果执行到这一步说明数组中不存在相加等于target的两个元素
		return new int[0];
	}
}

三、提交结果

在这里插入图片描述


总结

以上便是力扣第一题两数之和不是用暴力for循环的解题思路,使用哈希表以空间来换时间的方式提高查询的效率。第一道题相对简单,希望自己能够坚持下去,愈挫愈勇!

所谓出路,就是走出去才会有路。人之所以能,是相信自己能。一个人最大的破产是绝望,最大的资产是希望。机会面前人人平等,但机会并不平均分配。创造机会的是勇者,等待机会的是常人,放弃机会的是蠢人。人生最大的遗憾不是过错,而是错过,有的机会一旦错过,便再也不可能出现!

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 14:26:57  更:2021-07-22 14:29:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:53:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码