算法(一)
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
第一种方法暴力求解:
双层循环遍历数组,然后判读(nums[i]==target-nums[j]),然后返回指定的元素下标。
class Solution {
public int[] twoSum(int[] nums, int target) { for(int i=0;i<nums.length;i++){ for(int j=i+1;j<nums.length;j++){ if(nums[i]==target-nums[j]){ return int[]{i,j}; } } } throw new IllegalArgumentException("没有这两个数"); }}
2.两遍哈希表:
可以把哈希表理解为一个数组,每个索引对应一个存储位置,哈希表的索引并不像普通数组的索引那样,从0到length-1,而是由关键字(数据本身)通过哈希函数得到
哈希表中的主要函数
1。创建哈希表 Map<> map=new HashMap<>();
2.添加元素到哈希表中 map.put();
3.查看哈希表中是否包含元素map.containsKey();
4.已知数的到数的索引 map.get();
class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { map.put(nums[i], i);//将数组对应的数组下标,存储到哈希表中 } for (int i = 0; i < nums.length; i++) { int complement = target - nums[i];
//判断条件 if (map.containsKey(complement) && map.get(complement) != i) { return new int[] { i, map.get(complement) }; } } throw new IllegalArgumentException("No two sum solution"); } }
浙公网安备 33010602011771号