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

LeetCode-3185 构成整天的下标对数目Ⅱ

今天的每日一题是昨天的升级版,昨天的数据量比较小直接暴力就完事了,今天数据量上升,暴力就不行了。

题目简单翻译一下就是找出从数组里找出俩数,相加的和正好可以被24整除,一共可以找出几对。

暴力解法就是两两相加取余,昨天的题直接暴力甚至时间复杂度可以跑到100%

今天的题目一看就不能暴力,所以我没去试。

两个数相加的和能被24整除,那么表示这俩数分别取余24的结果相加还可以被24整除。

所以我们可以把数组里的数全部取余24,余数相同的数我们完全可以把它们当成是同一个数,这样就可以把很多个数据给分为24种(0~23)

假设余数为1的数有n个,而余数为23的数有m个,那么这两批数是可以两两配对的,所以得到的下标对是n*m

同理,余数为2的数就找余数为22的,以此类推……

但是有个小细节,那就是余数为0和余数为12的是特例,因为它们是和自己本身这种类型的数进行配对的,这就需要用到高中数学的排列组合了(我忘了,百度的)。

假设它们自身个数是n,那么两两配对(不重复)的组合数就是(n*(n-2)/ 2)。

class Solution {
public:long long countCompleteDayPairs(vector<int>& hours) {long long res = 0;unordered_map<int,long>cache;for(int& h:hours)   cache[h%24]++;for(int i = 1; i < 12; ++i) res += (cache[i] * cache[24 - i]);// 0和12需要单独计算,因为是自身两两配对res += (cache[0] * (cache[0] - 1)) / 2;res += (cache[12] * (cache[12] - 1)) / 2;return res;}
};


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

相关文章:

  • AUTOSAR_EXP_ARAComAPI的5章笔记(14)
  • mysql表添加索引
  • 2015年-2017年 计算机技术专业 程序设计题(算法题)实战_c语言程序设计数据结构程序设计分析
  • Electron-(三)网页报错处理与请求监听
  • 斯坦福大学团队总结大语言模型在生物学领域的进展,助力AI解决复杂生物学问题|顶刊精析·24-10-21
  • 【Flutter】Dart:异步
  • 利士策分享,给成功抛个媚眼,学习能否成为“丘比特”?
  • 解除123云盘1G下载限制油猴脚本方法
  • 冒泡,选择,插入,快速,归并排序(JavaScript)代码实现
  • 【面试题】什么是SpringBoot以及SpringBoot的优缺点
  • TitanIDE:解锁编程教学新范式
  • 软考科目怎么选?软考科目选哪个好?
  • Cilium Network Policy
  • 【Excel】函数各类公式总结
  • 问丫|快来打造你的专属 AI 数字分身,畅享独特社交体验!
  • 【Trick】IOS系统解决“未受信任的企业级开发者”问题
  • 【Linux系统】Ubuntu的简单操作
  • 探秘 ArrayList:源码剖析与扩容策略
  • 虚拟内存与物理内存:计算机存储系统的核心要素
  • ETLCloud搭配MySQL | 让关系型数据库更智能
  • 中国云厂出海:如何绕过暗礁,找到宝藏?
  • vue3.0 + vite打包完成后,将dist下的资源包打包成zip
  • 用哪种建站程序做谷歌SEO更容易?
  • DAG和Steps
  • C++ 红黑树
  • 接口测试 —— Postman 变量了解一下!