本文主要是介绍【打卡第183道】【数组】【leetCode高频】:1. 两数之和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
2、算法分析
注意:数组中的元素不能重复使用。
这个题比较简单的思路就是两个for循环查找比较。将符合条件的下标放到结果集数组中。
最后返回结果集。但是效率比较低,时间复杂度比较高O(n^2)
但是使用Map集合就不一样了。
因为Map是精准查询,是根据Key找到Value;而且Map查询不是全部查询,而是进一步缩小了范围。Map<Integer,Integer>,Key存储的是数组的值,Value存储的是数组的下标的。
直接看代码
3、代码实现
class Solution {public int[] twoSum(int[] nums, int target) {int n = nums.length;int[] res = new int[2];for(int i = 0;i < n;i++){for(int j = i + 1;j < n;j++){if(nums[i] + nums[j] == target){res[0] = i;res[1] = j;break;}}}return res;}
}
class Solution {public int[] twoSum(int[] nums, int target) {int n = nums.length;Map<Integer,Integer> map = new HashMap<>();for(int i = 0;i < n;i++){if(map.containsKey(target - nums[i])){return new int[]{map.get(target - nums[i]),i};}map.put(nums[i],i);}return null;}
}
这篇关于【打卡第183道】【数组】【leetCode高频】:1. 两数之和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!