昌平区手机网站制作服务,百度站长网站提交,深圳市建设交易服务网,建设手机网站培训教程文章目录 242.有效的字母异位词349. 两个数组的交集202. 快乐数1. 两数之和454. 四数相加 II383. 赎金信15. 三数之和18. 四数之和 242.有效的字母异位词 class Solution {public boolean isAnagram(String s, String t) {if(snull || tnull || s.length()!t.length()){return … 文章目录 242.有效的字母异位词349. 两个数组的交集202. 快乐数1. 两数之和454. 四数相加 II383. 赎金信15. 三数之和18. 四数之和 242.有效的字母异位词 class Solution {public boolean isAnagram(String s, String t) {if(snull || tnull || s.length()!t.length()){return false;}MapCharacter, Integer mapSstrToMap(s);MapCharacter, Integer mapTstrToMap(t);return mapS.equals(mapT);}private MapCharacter, Integer strToMap(String str){MapCharacter, Integer map new HashMap();for(int i0;istr.length();i){char chstr.charAt(i);// if(map.containsKey(ch)){// map.put(ch,map.get(ch)1);// }else{// map.put(ch,1);// }map.put(ch, map.getOrDefault(ch,0)1);}return map;}
}为什么用下面的代码代替 equals() 方法来判断两个 Map 的内容是否相等时会有一个测试用例不通过
for(Map.EntryCharacter, Integer entry:mapS.entrySet()){Character keySentry.getKey();Integer valueSentry.getValue();if(!mapT.containsKey(keyS) || mapT.get(keyS)!valueS){return false;}
}349. 两个数组的交集 class Solution {public int[] intersection(int[] nums1, int[] nums2) {if(nums1null || nums2null){return null;}// 分别将两个数组转成Set集合去重SetInteger set1new HashSet();for(int i0;inums1.length;i){set1.add(nums1[i]);}SetInteger set2new HashSet();for(int i0;inums2.length;i){set2.add(nums2[i]);}//求set1与set2的交集交集保存在set1中//retainAll保留两者都有的set1.retainAll(set2);int[] numnew int[set1.size()];int j0;for(Integer item:set1){num[j]item;}return num;}
}202. 快乐数 class Solution {public boolean isHappy(int n) {// 将正整数n的每一位放入List集合升序排列ListInteger list getNewList(n);SetList setnew HashSet();int sum-1;while(true){if(set.contains(list)){return false;}sumlistSum(list);if(sum1){return true;}else{set.add(list);listgetNewList(sum);}}}private ListInteger getNewList(int num){ListInteger list new ArrayList();while(num/10!0){int modResnum%10;list.add(modRes);num/10;}list.add(num); Collections.sort(list);return list;}private int listSum(ListInteger list){int sum0;for (Integer item : list) {sumitem*item;}return sum;}
}1. 两数之和 class Solution {public int[] twoSum(int[] nums, int target) {MapInteger,Integer mapnew HashMap();for(int i0;inums.length;i){// 要在数组元素还未进Map集合时判断Map中是否有target-nums[i])if(map.containsKey(target-nums[i])){return new int[]{map.get(target-nums[i]), i};}//Map中key是数组元素值value是元素在数组中的下标map.put(nums[i],i);}return null;}
}454. 四数相加 II 思路将四个数组分为两组处理。
class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {MapInteger, Integer mapnew HashMap();for(int i0;inums1.length;i){for(int j0;jnums2.length;j){int sum nums1[i]nums2[j];map.put(sum, map.getOrDefault(sum, 0)1);}}int count0;for(int i0;inums3.length;i){for(int j0;jnums4.length;j){int sum nums3[i]nums4[j];if(map.containsKey(-sum)){countmap.get(-sum);}}}return count;}
}383. 赎金信 class Solution {public boolean canConstruct(String ransomNote, String magazine) {// 将magazine中的字符以及对应出现的频率记录到Map中MapCharacter,Integer mapnew HashMap();for(int i0;imagazine.length();i){map.put(magazine.charAt(i),map.getOrDefault(magazine.charAt(i),0)1);} for(int i0;iransomNote.length();i){char currentCh ransomNote.charAt(i);if(!map.containsKey(currentCh)){return false;}else{map.put(currentCh,map.get(currentCh)-1);if(map.get(currentCh)0){map.remove(currentCh);}}}return true;}
}15. 三数之和 用了哈希表时间超限据说用排序双指针思路简单且可行后面刷到双指针的题再完成这个方法的题解。
class Solution {public ListListInteger threeSum(int[] nums) {// key两个元素的和 value所有和等于key的元素组合以下标的形式记录MapInteger, ListListInteger map new HashMap();for(int i0;inums.length;i){for(int ji1;jnums.length;j){// 将前两个元素包装到List中ListInteger innerListnew ArrayList();innerList.add(i);innerList.add(j);int keynums[i]nums[j];if(!map.containsKey(key)){ListListInteger outerListnew ArrayList(); outerList.add(innerList);map.put(key, outerList);}else{map.get(key).add(innerList);}}}SetListInteger resSetnew HashSet(); for(int k0;knums.length;k){if(map.containsKey(-nums[k])){ListListInteger outerListmap.get(-nums[k]);for(ListInteger innerList : outerList){if(!innerList.contains(k)){ListInteger innerResListnew ArrayList();innerResList.add(nums[innerList.get(0)]);innerResList.add(nums[innerList.get(1)]);innerResList.add(nums[k]);Collections.sort(innerResList);resSet.add(innerResList);}}}}return new ArrayList(resSet);}
}18. 四数之和 跟三数之和一样也是排序双指针刷到双指针再做。