提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、力扣1. 两数之和
- 二、力扣454. 四数相加 II
- 三、力扣383. 赎金信
前言
使用map的空间消耗要比数组大一些的,因为map要维护红黑树或者哈希表,而且还要做哈希函数,是费时的!数据量大的话就能体现出来差别了。 所以数组更加简单直接有效!
什么时候使用哈希法,当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。
一、力扣1. 两数之和
class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> map = new HashMap<>();int [] res = new int[2];for(int i = 0; i < nums.length; i ++){map.put(nums[i],i);}for(int i = 0; i < nums.length; i ++){if(map.containsKey(target-nums[i]) && map.get(target-nums[i]) != i){return new int[]{i,map.get(target-nums[i])};}}return res;}
}
二、力扣454. 四数相加 II
class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {Map<Integer,Integer> map = new HashMap<>();int count = 0;for(int a : nums4){for(int b : nums3){map.put(a+b,map.getOrDefault(a+b,0)+1);}}for(int i = 0; i < nums1.length; i ++){int sum = nums1[i];for(int j = 0; j < nums2.length; j ++){sum += nums2[j];if(map.containsKey(-sum)){count += map.get(-sum);}sum -= nums2[j];}}return count;}
}
三、力扣383. 赎金信
class Solution {public boolean canConstruct(String ransomNote, String magazine) {Map<Character,Integer> map = new HashMap<>();for(int i = 0; i < magazine.length(); i ++){map.put(magazine.charAt(i),map.getOrDefault(magazine.charAt(i),0)+1);}for(int i = 0; i < ransomNote.length(); i ++){if(!map.containsKey(ransomNote.charAt(i))){return false;}else if(map.get(ransomNote.charAt(i)) <= 0){return false;}else{map.put(ransomNote.charAt(i),map.get(ransomNote.charAt(i))-1);}}return true;}
}