454.四数相加II
题目描述
给你四个整数数组 nums1
、nums2
、nums3
和 nums4
,数组长度都是 n
,请你计算有多少个元组 (i, j, k, l)
能满足:
0 <= i, j, k, l < n
nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
题解
class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
int res=0;
//key:存储nums1+nums2的值,value存储nums1+nums2出现的次数
Map<Integer,Integer> map=new HashMap<>();
for(int i:nums1){
for(int j:nums2){
int sum=i+j;
//map.getOrDefault:如果map集合中有该元素,则返回对于的key,否则返回0
map.put(sum,map.getOrDefault(sum,0)+1);
}
}
//在map集合中查找是否集合中存在-(i+j),如果存在则结果+1;
for(int i:nums3){
for(int j:nums4){
res+=map.getOrDefault(0-i-j,0);
}
}
return res;
}
}
383.赎金信
题目描述
给你两个字符串:ransomNote
和 magazine
,判断 ransomNote
能不能由 magazine
里面的字符构成。
如果可以,返回 true
;否则返回 false
。
magazine
中的每个字符只能在 ransomNote
中使用一次。
题解
class Solution {
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++){
if(record[ransomNote.charAt(i)-'a']!=0){
record[ransomNote.charAt(i)-'a']--;
}else{
return false;
}
}
return true;
}
}