当前位置: 首页 > news >正文

算法Day-7

454. 四数相加 II

给你四个整数数组 nums1nums2nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:

  • 0 <= i, j, k, l < n
  • nums1[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

本题是求四个数组中的美国数组取一个数相加等于0的次数。

我们可以将四组数据分成两组,然后进行操作这样就可以每组遍历两次for循环,降低时间复杂度,将一组和另一组的数据相加存入字典中,如果存在就让值加一,然后再遍历下一组数组,将另外两组数据相加,然后取相反值,并判断是否在字典中存在,如果存在说明相加等于0,符合条件,因为符合条件的数据不一定只有一个,所以要在最后的数据加上对应字典中的key所对应的值。最后返回。

public class Solution {public int FourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {var dic = new Dictionary<int,int>();int res = 0;foreach(int c1 in nums1){foreach(int c2 in nums2){if(dic.ContainsKey(c1+c2)){dic[c1+c2]++;}else{dic.Add(c1+c2,1);}}}foreach(int c1 in nums3){foreach(int c2 in nums4){int x = -(c1+c2);if(dic.ContainsKey(x)){res+=dic[x];}}}return res;}
}

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 <= 105
  • ransomNote 和 magazine 由小写英文字母组成

本题判断两个字符串,一个字符串a是否能够由字符串b构成,并且字符串b的每个字符只能用一次,这里我们就使用ASI码进行-‘a’然后将字符存储在int[] sum 长度为26;记录每个字符的出现的次数,然后遍历字符串b,将b的中出现的字符在sum中进行相应的减1,并判断是否小于0,如果小于0则返回false,最后如果没有返回false。然后返回true;

public class Solution {public bool CanConstruct(string ransomNote, string magazine) {if(ransomNote.Length>magazine.Length) return false;int[] sum = new int[26];for(int i = 0;i<magazine.Length;i++){sum[magazine[i]-'a']++;}for(int i = 0;i<ransomNote.Length;i++){sum[ransomNote[i]-'a']--;if(sum[ransomNote[i]-'a']<0) return false;}return true;}
}


http://www.mrgr.cn/news/56461.html

相关文章:

  • 570,至少有5名直接下属的经理
  • 录微课专用提词器,不会被录进视频中的提词器,还能显示PPT中备注的内容
  • CertiK首席安全官出席上海区块链周,探讨AI在区块链领域的创新与挑战
  • In-place Editor 存储库页面
  • JAVA课设-图书指引系统(前后端分离)
  • Java最全面试题->Java基础面试题->JavaSE面试题->异常面试题
  • Log4j和SLF4J在Java中打印日志的区别
  • 大厂面试真题-Redis的Cluster模式的smart clent了解吗,怎么初始化的
  • 上传文件到云存储前端报错413 Request Entity Too Large
  • 智能工厂的软件设计 结构映射、类比推理及信念修正
  • AcWing 11 背包问题求方案数
  • MybatisPlus入门(一)MybatisPlus简介
  • 字节流写入文件
  • 理解CPU怎么执行一条指令
  • 【flask web】 Blueprint 蓝图 路由模块化
  • 2、图像的特征
  • 技术经济学·技术经济分析指标体系与基本原则
  • 在金融领域,机器学习算法优化的成功案例有哪些?
  • 【C++复习】Map Set HashMap HashSet的模拟实现{代码分享}
  • 马拉车算法(C/C++)
  • 3184. 构成整天的下标对数目 I
  • 车规芯片SOC简介
  • web服务器介绍
  • 图文深入理解Oracle Total Recall
  • 【JavaEE初阶】网络编程TCP协议实现回显服务器以及如何处理多个客户端的响应
  • GJS-WCP