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]
**提示:
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 两数之和相关推荐
- leetcode 两数之和 整数反转 回文数 罗马数字转整数
1.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...
- leetcode两数之和
#####两数之和 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15 ...
- leetcode两数之和,三数之和,四数之和问题
1. 两数之和 遍历数组的同时,使用字典(哈希表)记录数对应的索引,对于每一个数nums[i],判断 target-nums[i]是否在字典中,找到一个即返回.若列表中的与元素有重复也可这样处理,因为 ...
- LeetCode两数之和 56 python
描述 中文 English 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范 ...
- Leetcode——两数之和
这题有一个很简单的解决办法,就是暴力求解法,跟其他语言是一样的,但是就只是语言的书写形式上不一样. 思路:两层循环遍历,一个值一个值的试,最后找出最终的结果 class Solution(object ...
- [LeetCode] 两数之和
英文描述 Given an array of integers, return indices of the two numbers such that they add up to a specif ...
- LeetCode 两数之和(Two Sum)
题目 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例 给定 nums = [2, 7, 11, 15], targe ...
- leetCode:twoSum 两数之和 【JAVA实现】
LeetCode 两数之和 给定一个整数数组,返回两个数字的索引,使它们相加到特定目标. 您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素. 更多文章查看个人博客 个人博客地址:t ...
- 【LeetCode】两数之和、三数之和、四数之和系列
文章目录 两数之和★ 三数之和★★ 四数之和★★ 四数相加Ⅱ★★ 最接近的三数之和★★ 此篇文章总结下力扣中的两数之和.三数之和.四数之和及一系列求数组中满足达到目标值的元组个数的问题,仔细阅读下面的 ...
最新文章
- 【 karle 专栏 】Android 初探底层知识系列
- java基础(三) 加强型for循环与Iterator
- sqlite数据库实现字符串查找的方法(instr,substring,charindex替代方案)
- 网络安全系列之三十五 缓冲区溢出
- 北邮王立新教授提到的“5年后运营商排名论”
- php 501解决办法,PHP 使用错误处理解析
- 快速入门MyBatis-Plus,看这一篇就够了。
- 使用python将多份pdf文件合并成一份
- wps桌面右键缺少新建文档入口
- dependency
- php composer.phar install,解决composer.phar安装问题
- 照度稳定可调LED台灯
- element表格el-table表头显示斜杠
- 根据音乐播放进度实时更新音乐播放器播放进度条
- 创建学生信息管理数据库
- python 利用for 循环简便生成list
- 定了!今日起,本号粉丝可免费参与网易前端培训营!
- 选择护肤品时应该注意的功效成分!
- mysql 占用cpu过高
- 8.14 早间行情分析和操作建议 昨晚一波多头拉伸后 空头顺势反压
热门文章
- [家里蹲大学数学杂志]第418期南开大学2013年实变函数期末考试试题参考解答
- IFRAME jquery 获取document对象
- 引:善用backtrace解决大问题
- 套接字Select I/O模型
- [分享]极富挑战性的大公司面试的智力题
- 华为三层交换机路由配置案例_{华为HCNP-RS}三层交换机的配置实例
- 数学教师计算机能力提升,数学教师信息技术应用能力提升培训总结.doc
- matlab图像相加例子,MATLAB图像处理例子
- java mesos kubernete_Fabric8操作Kubernetes(一)
- php探针源码,服务器探针 (刘海探针)—开源PHP探针