文章目录

  • 前言
  • 一、题目内容
  • 二、解题过程
    • 1. 解题思路
    • 2. 解题代码
  • 三、提交结果
  • 总结

前言

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

随着对框架学习的不断深入以及项目经验的不断积累,愈发的意识到掌握基本算法逻辑的必要性,因此决定每天在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,元素的索引保存为valuehashMap.put(nums[i], i);}// 不会执行到这一步,如果执行到这一步说明数组中不存在相加等于target的两个元素return new int[0];}
}

三、提交结果


总结

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

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

LeetCode第一题:两数之和(Java)相关推荐

  1. LeetCode第一题两数之和---JavaScript

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一 ...

  2. LeetCode第一题两数之和

    题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标.你可以假设每种输入只会对应一个答案.但是,数 ...

  3. LeetCode刷题-两数之和(持续更新)

    文章目录 LeetCode 1. Two Sum (两数之和) 题目描述 样例 解题思路一(暴力法) 解题思路二(使用map) 前言:最近业余时间,一直在看LeetCode上面的题,上面有许多好的解题 ...

  4. leetcode第一题两数相加

    leetcode两数相加: 提示: 问题描述: int* twoSum(int* nums, int numsSize, int target, int* returnSize) {for (int ...

  5. 【leetcode 简单】第一题 两数之和

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...

  6. php算法两数之和 复杂度,每天一道leetcode算法题:两数之和-php版

    我们先来看题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用 ...

  7. leetcode算法题--两数之和

    题目地址:https://leetcode-cn.com/problems/two-sum/ vector<int> twoSum(vector<int>& nums, ...

  8. LeetCode题库第1题 两数之和

    两数之和 LeetCode题库第1题 两数之和 看到题,我就想到了暴力法: public int[] force(int[] nums,int target) {for (int i = 0; i & ...

  9. leetcode系列--1.两数之和

    leetcode 第1题 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输 ...

  10. LeetCode:1.两数之和

    LeetCode:1.两数之和 第一次写题解,也第一次做leetcode,不妥之处还望海涵 一.暴力 //cpp class Solution {public:vector<int> tw ...

最新文章

  1. Operation Queues并发编程
  2. 2021年4月28日 深圳头条后台开发实习面试(hr面)
  3. pytorch 查看当前学习率_pytorch调整模型训练的学习率
  4. springboot后台怎么获取前端传过来的excel_开源商城系统包含后台管理和手机端
  5. php 创建zip,php生成zip压缩文件的实例详解
  6. 3个检测浏览器User-Agent信息的网站
  7. 边拍照边显示弹幕 小米公开拍摄相关专利
  8. OpenShift 4 - 通过DaemonSet在指定Node上运行守护程序
  9. 当使用tensorflow时出现“the requested device apperas to be a GPU, but CUDA is not enabled”的解决办法
  10. R系列处理器是服务器,AMD全新R系列处理器领军嵌入式高性能领域
  11. 虚拟化arm服务器,服务器虚拟化领域的ARM处理器与RISC技术
  12. 小程序发送公众号模板消息+PHP后台
  13. ibm服务器预装什么系统,如何恢复IBM存储服务器的预装系统
  14. 格拉姆矩阵 Gram Matrix 简单理解
  15. 怎么选择好的便宜云虚拟主机?分享挑选便宜云虚拟主机的小技巧
  16. pytorch和tensorflow中实现SMU激活函数
  17. js汉字转拼音加排序
  18. mongodb 基础入门
  19. C# 计算中文汉字笔画数
  20. TODOList清单基本功能以及实现

热门文章

  1. 【STL切片算法文献笔记】基于GPU并行计算的3D打印切片算法
  2. html+canvas+输入文字换行,canvas文字换行
  3. javascript判断浏览器和终端类型,js如何区分手机、电脑终端和浏览器
  4. 调用微信二维码识别开源库
  5. 多种方法解决多个div并排显示的问题
  6. 【JAVA快速入门,IDEA开发工具】
  7. MATLAB | 生成视频文件
  8. key文件转化ppt
  9. linux系统外接硬盘_Mac如何在外置硬盘上安装Linux
  10. python实现百度语音之语音识别