做网站用宋体有版权问题吗,国外域名注册网站,大兴黄村网站建设,文学网站建设平台454. 四数相加 II 已解答 中等 相关标签 相关企业 给你四个整数数组 nums1、nums2、nums3 和 nums4 #xff0c;数组长度都是 n #xff0c;请你计算有多少个元组 (i, j, k, l) 能满足#xff1a; 0 i, j, k, l nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 … 454. 四数相加 II 已解答 中等 相关标签 相关企业 给你四个整数数组 nums1、nums2、nums3 和 nums4 数组长度都是 n 请你计算有多少个元组 (i, j, k, l) 能满足 0 i, j, k, l nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1 输入nums1 [1,2], nums2 [-2,-1], nums3 [-1,2], nums4 [0,2]
输出2
解释
两个元组如下
1. (0, 0, 0, 1) - nums1[0] nums2[0] nums3[0] nums4[1] 1 (-2) (-1) 2 0
2. (1, 1, 0, 0) - nums1[1] nums2[1] nums3[0] nums4[0] 2 (-1) (-1) 0 0示例 2 输入nums1 [0], nums2 [0], nums3 [0], nums4 [0]
输出1提示 n nums1.lengthn nums2.lengthn nums3.lengthn nums4.length1 n 200-228 nums1[i], nums2[i], nums3[i], nums4[i] 228 题解
class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {MapInteger,Integer sums1 new HashMap();MapInteger,Integer sums2 new HashMap();for(int i 0; i nums1.length; i){for(int j 0; j nums1.length; j){if(sums1.containsKey(nums1[i] nums2[j])){Integer num1 nums1[i] nums2[j];sums1.replace(nums1[i] nums2[j],sums1.get(num1) 1);}else sums1.put(nums1[i] nums2[j],1);if(sums2.containsKey(nums3[i] nums4[j])){Integer num2 nums3[i] nums4[j];sums2.replace(nums3[i] nums4[j],sums2.get(num2) 1);}else sums2.put(nums3[i] nums4[j],1);}}int numm 0;for(Integer key:sums1.keySet()){if(sums2.containsKey(0 - key)){numm sums1.get(key) * sums2.get(0 - key);}}return numm;}
}
本题和昨天的两数之和有异曲同工之妙这次是用两个map依次存储nums1 nums2和nums3 nums4key是值value是出现的次数然后统计完以后再寻找就可以了难度尚可做的时候并不卡顿就是代码量有点大敲的我手酸。 383. 赎金信 已解答 简单 相关标签 相关企业 给你两个字符串ransomNote 和 magazine 判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以返回 true 否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1 输入ransomNote a, magazine b
输出false示例 2 输入ransomNote aa, magazine ab
输出false示例 3 输入ransomNote aa, magazine aab
输出true提示 1 ransomNote.length, magazine.length 105ransomNote 和 magazine 由小写英文字母组成 class Solution {public boolean canConstruct(String ransomNote, String magazine) {char[] ransomNote1 ransomNote.toCharArray();char[] magazine1 magazine.toCharArray();MapCharacter,Integer mag new HashMap();MapCharacter,Integer ran new HashMap();for(char i:magazine1){if(mag.containsKey(i)){mag.replace(i,mag.get(i) 1);}else mag.put(i,1);}for(char i:ransomNote1){if(ran.containsKey(i)){ran.replace(i,ran.get(i) 1);}else ran.put(i,1);}for(Character key : ran.keySet()){if(!mag.containsKey(key)||ran.get(key) mag.get(key)){return false;}}return true;}
}
用跟第一题一样的写法我这套性能差了点但胜在通用。 15. 三数之和 已解答 中等 相关标签 相关企业 提示 给你一个整数数组 nums 判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k 同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意答案中不可以包含重复的三元组。 示例 1 输入nums [-1,0,1,2,-1,-4]
输出[[-1,-1,2],[-1,0,1]]
解释
nums[0] nums[1] nums[2] (-1) 0 1 0 。
nums[1] nums[2] nums[4] 0 1 (-1) 0 。
nums[0] nums[3] nums[4] (-1) 2 (-1) 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意输出的顺序和三元组的顺序并不重要。示例 2 输入nums [0,1,1]
输出[]
解释唯一可能的三元组和不为 0 。示例 3 输入nums [0,0,0]
输出[[0,0,0]]
解释唯一可能的三元组和为 0 。提示 3 nums.length 3000-105 nums[i] 105 class Solution {public ListListInteger threeSum(int[] nums) {ListListInteger result new ArrayList();Arrays.sort(nums);for(int i 0; i nums.length; i){if(nums[i] 0){return result;}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{result.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;right--;left;}}}return result;}
}
这一题细节很多用的双指针看了题解才写完 18. 四数之和 已解答 中等 相关标签 相关企业 给你一个由 n 个整数组成的数组 nums 和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] 若两个四元组元素一一对应则认为两个四元组重复 0 a, b, c, d na、b、c 和 d 互不相同nums[a] nums[b] nums[c] nums[d] target 你可以按 任意顺序 返回答案 。 示例 1 输入nums [1,0,-1,0,-2,2], target 0
输出[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]示例 2 输入nums [2,2,2,2,2], target 8
输出[[2,2,2,2]]提示 1 nums.length 200-109 nums[i] 109-109 target 109 class Solution {public ListListInteger fourSum(int[] nums, int target) {ListListInteger result new ArrayList();Arrays.sort(nums);for (int i 0; i nums.length; i) {if (nums[i] 0 nums[i] target) {return result;}if (i 0 nums[i - 1] nums[i]) { continue;}for (int j i 1; j nums.length; j) {if (j i 1 nums[j - 1] nums[j]) { 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 {result.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 result;}
}
有其他事就不写了简单抄一遍吧和三数之和一样的思路