hash表【数组、map】以及双指针的运用
454.四数相加II
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {//nums1,nums2的和作为key,出现次数记位valueMap<Integer,Integer> map = new HashMap<Integer,Integer>();for(int a : nums1){for(int b: nums2){int sum = a+b;map.put(sum,map.getOrDefault(sum,0)+1);}}int sum = 0;for(int a : nums3){for(int b: nums4){sum += map.getOrDefault(0-a-b,0);}}return sum;}
- 赎金信
public boolean canConstruct(String ransomNote, String magazine) {if(ransomNote.length() > magazine.length()){return false;}int[] record = new int[26];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']--;}for(int ele: record){if(ele < 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(right > left){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(right>left&& nums[right] == nums[right-1]) right--;while(right>left&& nums[left] == nums[left+1]) left ++ ;left++;right--;}}}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){return res;}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){int sum = 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;}
}