class Solution { public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) { int res=0; Map<Integer,Integer> map=new HashMap<>(); for(int i:nums1) { for(int j:nums2) { int sum=i+j; map.put(sum,map.getOrDefault(sum,0)+1); } } for(int i:nums3) { for(int j:nums4) { res+=map.getOrDefault(0-i-j,0); } } return res; } } |
并不清楚简单的解题思路,以及对map.getOrDefault()函数也并不熟悉
class Solution { public boolean canConstruct(String ransomNote, String magazine) { if(ransomNote.length()>magazine.length()) return false; int[] fun = new int[26]; for(char c:magazine.toCharArray()) { fun[c-'a']+=1; } for(char c:ransomNote.toCharArray()) { fun[c-'a']-=1; } for(int i:fun) { if(i<0) return false; } return true;
} } |
会想不起来数组是特殊的map,直接使用map又会比较费空间
class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> res = new ArrayList<>(); int len = nums.length; Arrays.sort(nums); for(int i=0;i<len;i++) { if(nums[i]>0) return res;
if(i>0&&nums[i]==nums[i-1]) continue; int left=i+1; int right=len-1; while(left<right) { if(nums[i]+nums[left]+nums[right]>0) { right--; }else if(nums[i]+nums[left]+nums[right]<0) { left++; }else{ res.add(Arrays.asList(nums[i],nums[left],nums[right])); while(left<right&&nums[right]==nums[right-1]) right--; while(left<right&&nums[left]==nums[left+1]) left++; right--; left++; } } } return res; } } |
这道题的去重部分,比较难理解,需要二刷
class Solution { public List<List<Integer>> fourSum(int[] nums, int target) { List<List<Integer>> res = new ArrayList<>(); Arrays.sort(nums); for(int i=0;i<nums.length;i++) { if(nums[i]>0&&nums[i]>target) break;
if(i>0&&nums[i]==nums[i-1]) continue;
for(int j=i+1;j<nums.length;j++) { if(j>i+1&&nums[j]==nums[j-1]) continue;
int left=j+1; int right=nums.length-1; while(right>left) { long sum=(long)nums[i]+nums[j]+nums[left]+nums[right]; if(sum>target) { right--; }else if(sum<target){ left++; }else{ res.add(Arrays.asList(nums[i],nums[j],nums[left],nums[right])); while(right>left&&nums[right]==nums[right-1]) right--; while(right>left&&nums[left]==nums[left+1]) left++; left++; right--; } } }
} return res; }
} |
这道题目的剪枝和去重是比较难的,感觉自己还没有完全掌握这道题目,需要二刷