454 四数相加2
题目链接:. - 力扣(LeetCode)
主要思想:使用字典,将前两个数组所有相加的Value出现的次数统计,再遍历后两个数组进行比较,比起暴力解法,时间复杂度从O(n四次方)降到O(n二次方)
public int FourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4)
{
Dictionary<int,int> dic=new Dictionary<int,int>();
int count = 0;
foreach (int index1 in nums1)
{
foreach (var index2 in nums2)
{
if (dic.ContainsKey(index1+index2))
{
dic[index1 + index2]++;
}
else
{
dic.Add(index1+index2,1);
}
}
}
foreach (var index3 in nums3)
{
foreach (var index4 in nums4)
{
if (dic.TryGetValue(-(index3 + index4), out var value))
{
count += value;
}
}
}
return count;
}
383 赎金信
题目链接:. - 力扣(LeetCode)
public bool CanConstruct(string ransomNote, string magazine)
{
Dictionary<char,int> dic=new Dictionary<char,int>();
foreach (var index in magazine)
{
if (dic.ContainsKey(index))
{
dic[index]++;
}
else
{
dic.Add(index, 1);
}
}
foreach (var index in ransomNote)
{
if (dic.ContainsKey(index))
{
if (dic[index] <= 0) return false;
dic[index]--;
}
else
{
return false;
}
}
return true;
}