题目

给定一个整数数组 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]

**提示:
2 <= nums.length <= 10^3
-10^9 <= nums[i] <= 10^9
-10^9 <= target <= 10^9
只会存在一个有效答案

一、暴力破解

1.思路

枚举法:通过两次for循环,枚举出数组中不同元素的组合情况,从而判断相加是否与target相等

2.代码实现

public class NumberTotalDemo {public static void main(String[] args) {int[] nums = {1,2,3,4,5,6};int target = 5;int[] sum = twoNumberSum(nums, target);for (int i=0;i<sum.length;i++){System.out.printf("%d ",sum[i]);}}public static int[] twoNumberSum(int[] nums,int target){int n = nums.length;for (int i = 0; i < n; ++i) {for (int j = i+1;j<n;++j){if (nums[i] + nums[j] == target){return new int[]{i,j};}}}return new int[0];}
}

3.复杂度分析

分析可得s=n(n-1)/2, 时间复杂度为O(n^2), 空间复杂度为O(1);
所以时间复杂度过高,需要优化;

二、哈希表

1.思路

通过查找表法进行实现,查找表法又包括哈希表和平衡二叉搜索树;由于不考虑元素的顺序,所以通过hash来实现;

2.代码

public class NumberTotalDemo {public static void main(String[] args) {int[] nums = {1,2,3,4,5,6};int target = 5;int[] sum = twoNumberSum(nums, target);for (int i=0;i<sum.length;i++){System.out.printf("%d ",sum[i]);}}public static int[] twoNumberSum2(int[] nums,int target){Map<Integer,Integer> map = new HashMap<>(nums.length-1);map.put(nums[0],0);for (int i = 1; i < nums.length; i++) {if (map.containsKey(target - nums[i])){return new int[] {map.get(target - nums[i]),i};}map.put(nums[i],i);}return new int[0];}
}

创建hash表时,指定长度,防止因为hash扩容对性能上造成影响;

3.复杂度分析
毫无疑问时间复杂度为O(n),空间复杂度为O(n),空间复杂度是由于hash的开销;

LeetCode 两数之和相关推荐

  1. leetcode 两数之和 整数反转 回文数 罗马数字转整数

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

  2. leetcode两数之和

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

  3. leetcode两数之和,三数之和,四数之和问题

    1. 两数之和 遍历数组的同时,使用字典(哈希表)记录数对应的索引,对于每一个数nums[i],判断 target-nums[i]是否在字典中,找到一个即返回.若列表中的与元素有重复也可这样处理,因为 ...

  4. LeetCode两数之和 56 python

    描述 中文 English 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范 ...

  5. Leetcode——两数之和

    这题有一个很简单的解决办法,就是暴力求解法,跟其他语言是一样的,但是就只是语言的书写形式上不一样. 思路:两层循环遍历,一个值一个值的试,最后找出最终的结果 class Solution(object ...

  6. [LeetCode] 两数之和

    英文描述 Given an array of integers, return indices of the two numbers such that they add up to a specif ...

  7. LeetCode 两数之和(Two Sum)

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

  8. leetCode:twoSum 两数之和 【JAVA实现】

    LeetCode 两数之和 给定一个整数数组,返回两个数字的索引,使它们相加到特定目标. 您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素. 更多文章查看个人博客 个人博客地址:t ...

  9. 【LeetCode】两数之和、三数之和、四数之和系列

    文章目录 两数之和★ 三数之和★★ 四数之和★★ 四数相加Ⅱ★★ 最接近的三数之和★★ 此篇文章总结下力扣中的两数之和.三数之和.四数之和及一系列求数组中满足达到目标值的元组个数的问题,仔细阅读下面的 ...

最新文章

  1. 【 karle 专栏 】Android 初探底层知识系列
  2. java基础(三) 加强型for循环与Iterator
  3. sqlite数据库实现字符串查找的方法(instr,substring,charindex替代方案)
  4. 网络安全系列之三十五 缓冲区溢出
  5. 北邮王立新教授提到的“5年后运营商排名论”
  6. php 501解决办法,PHP 使用错误处理解析
  7. 快速入门MyBatis-Plus,看这一篇就够了。
  8. 使用python将多份pdf文件合并成一份
  9. wps桌面右键缺少新建文档入口
  10. dependency
  11. php composer.phar install,解决composer.phar安装问题
  12. 照度稳定可调LED台灯
  13. element表格el-table表头显示斜杠
  14. 根据音乐播放进度实时更新音乐播放器播放进度条
  15. 创建学生信息管理数据库
  16. python 利用for 循环简便生成list
  17. 定了!今日起,本号粉丝可免费参与网易前端培训营!
  18. 选择护肤品时应该注意的功效成分!
  19. mysql 占用cpu过高
  20. 8.14 早间行情分析和操作建议 昨晚一波多头拉伸后 空头顺势反压

热门文章

  1. [家里蹲大学数学杂志]第418期南开大学2013年实变函数期末考试试题参考解答
  2. IFRAME jquery 获取document对象
  3. 引:善用backtrace解决大问题
  4. 套接字Select I/O模型
  5. [分享]极富挑战性的大公司面试的智力题
  6. 华为三层交换机路由配置案例_{华为HCNP-RS}三层交换机的配置实例
  7. 数学教师计算机能力提升,数学教师信息技术应用能力提升培训总结.doc
  8. matlab图像相加例子,MATLAB图像处理例子
  9. java mesos kubernete_Fabric8操作Kubernetes(一)
  10. php探针源码,服务器探针 (刘海探针)—开源PHP探针