摘要:
考查HashMap使用,LeetCode入门题。
题目:
给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。而且,你不能重复利用这个数组中同样的元素。
示例:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
HashMap
key: target - nums[v]
value: v
每次迭代,判断 nums[v]
在不在hashmap中。
如果在,则 nums[v]
一定是之前 target - nums[index_before]
的值。此时返回 {index_before, v}
;
如果不在,则把key: target - nums[v]
和value: v
放到hashmap中。
1 2 3 4 5 6 7 8 9 10 11 12
| class Solution { public: unordered_map<int, int> heap; vector<int> twoSum(vector<int>& nums, int target) { for (int i = 0; i < nums.size(); i++) { int w = target - nums[i]; if (heap.count(nums[i])) return {heap[nums[i]], i}; heap[w] = i; } return {}; } };
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Solution {
public int[] twoSum(int[] nums, int target) { HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>(); for(int v = 0; v < nums.length; v++) { if(hashMap.get(nums[v]) != null) { return new int[]{hashMap.get(nums[v]), v}; } else { hashMap.put(target - nums[v], v); } } return new int[]{}; } }
|