当前位置: 首页 > news >正文

LeetCode:两数之和

文章收录于LeetCode专栏
LeetCode地址


两数之和

  给定一个整数数组nums和一个整数目标值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]

题解

第一步审题

  给定一个数组求得其中任意两数之和为目标值,题目很简单就是从数组中得得等于目标值的元素的下标。

第二步列出所有解

  求解该题目可以采用暴力求解和hash表两种方式。

解法一(暴力枚举)

  所谓暴力枚举就是采用两层循环,每层循环取出数组中一个元素,判断两层循环取出的两个元素相加是否等于目标值。

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

  暴力枚举法采用了两层循环时间复杂度较高,所以可以采用采用的空间换时间的方式,定义一个hash表来记录遍历过程中用过的元素及其下标,这样再下一轮判断的时候可以直接通过map.get(y)= target-x来判断是否等于目标值。

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

第三步复杂度分析

  暴力枚举法使用了两层循环且没有使用额外的内存空间,所以时间复杂度为O(n2),空间复杂度为O(1);hash表使用空间换时间的方法,所以时间复杂度为O(n),空间复杂度为O(n)。


一键三连,让我的信心像气球一样膨胀!

http://www.lryc.cn/news/345587.html

相关文章:

  • CSDN我的创作纪念日128天||不忘初心|努力上进|勇往直前
  • MySQL数据库中的浮点类型和高精度类型有什么区别?为什么不推荐使用浮点类型?
  • C++ 抽象与封装
  • antV X6的简要使用教程
  • 【LLM 论文】Step-Back Prompting:先解决更高层次的问题来提高 LLM 推理能力
  • Java——接口的补充
  • word转pdf的java实现(documents4j)
  • 基于K8S构建Jenkins持续集成平台
  • PHPStudy 访问网页 403 Forbidden禁止访问
  • 热爱电子值得做的电子制作实验
  • .class文件启动过程以及文件内容结构讲解
  • 解锁楼宇自动化新维度西门子Insight+BACnet IP I/O控制器
  • 2024.05.10作业
  • 基于POSIX标准库的读者-写者问题的简单实现
  • 重生我是嵌入式大能之串口调试UART
  • 【智能优化算法】蜜獾优化算法(Honey Badger Algorithm,HBA)
  • 【算法与数据结构】数组
  • 【数据结构】队列详解(Queue)
  • Baumer工业相机堡盟工业相机如何通过NEOAPISDK获取相机的Statistics图像传输统计信息(C#)
  • FreeRTOS标准库例程代码
  • wandb: - 0.000 MB of 0.011 MB uploaded持续出现的解决方案
  • 分布式模式让业务更高效、更安全、更稳定
  • 5.11学习记录
  • Java类加载器介绍
  • VC++ PDH/性能计数器
  • C++ 类和对象:面向对象编程基础
  • linux 基础命令使用
  • eve 导入linux
  • vivado新版本兼容老版本,vitis classic兼容sdk教程
  • 02.02.返回倒数第k个节点