四数之和||
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
Map<Integer,Integer>map=new HashMap<>();
int res=0;
for(int i=0;i<nums1.length;i++){
for(int j=0;j<nums2.length;j++){
int sum1=nums1[i]+nums2[j];
map.put(sum1,map.getOrDefault(sum1,0)+1);
}
}
for(int i:nums3){
for(int j:nums4){
res+=map.getOrDefault(0-i-j,0);
}
}
return res;
}
赎金信
public boolean canConstruct(String ransomNote, String magazine) {
int []record=new int[26];
if(ransomNote.length()>magazine.length())return false;
for(int i=0;i<magazine.length();i++){
record[magazine.charAt(i)-'a']++;
}
for(int i=0;i<ransomNote.length();i++){
record[ransomNote.charAt(i)-'a']--;
if(record[ransomNote.charAt(i)-'a']<0)return false;
}
return true;
}
三数之和
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> res=new ArrayList<>();
Arrays.sort(nums);
for(int i=0;i<nums.length;i++){
if(nums[i]>0)return res;
if(i>0&&nums[i]==nums[i-1])continue;
int left=i+1;
int right=nums.length-1;
while(left<right){
int sum=nums[i]+nums[left]+nums[right];
if(sum>0)right--;
else if(sum<0)left++;
else{
res.add(Arrays.asList(nums[i], nums[left], nums[right]));
while(left<right&&nums[left+1]==nums[left])left++;
while(left<right&&nums[right-1]==nums[right])right--;
left++;
right--;
}
}
}
return res;
}
四数之和
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]>target&&nums[i]>0)break;
if(i>0&&nums[i-1]==nums[i])continue;
for(int j=i+1;j<nums.length;j++){
if(nums[i]+nums[j]>target&&nums[i]+nums[j]>0)break;
if(j>i+1&&nums[j-1]==nums[j])continue;
int left=j+1;
int right=nums.length-1;
while(left<right){
long sum=(long)nums[i]+nums[j]+nums[left]+nums[right];
if(sum<target)left++;
else if(sum>target)right--;
else{
res.add(Arrays.asList(nums[i],nums[j],nums[left],nums[right]));
while(left<right&&nums[left+1]==nums[left])left++;
while(left<right&&nums[right-1]==nums[right])right--;
left++;
right--;
}
}
}
}
return res;
}