可以读通讯稿的组数

2023-12-19 04:15
文章标签 通讯稿 组数

本文主要是介绍可以读通讯稿的组数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

题目描述

校运动会上,所有参赛同学身上都贴有他的参赛号码。某班参赛同学的号码记于数组 nums 中。假定反转后的号码称为原数字的「镜像号码」。如果 两位同学 满足条件:镜像号码 A + 原号码 B = 镜像号码 B + 原号码 A,则这两位同学可以到广播站兑换一次读通讯稿的机会,为同班同学加油助威。请返回所有参赛同学可以组成的可以读通讯稿的组数,并将结果对10^9+7取余。

注意:

  • 镜像号码中如存在前置零,则忽略前置零。
  • 同一位同学可有多次兑换机会。
    示例 1:
输入:nums = [17,28,39,71]输出:3解释:
共有三对同学,分别为 [17,28]、[17,39]、[28,39]。其中:
第一对同学:17 + 82 = 71 + 28;
第二对同学:17 + 93 = 71 + 39;
第三对同学:28 + 93 = 82 + 39。

示例 2:

输入:nums = [71, 60]输出:1解释:
共有一对同学,为 [71, 60]。
因为 71 + 6 = 17 + 60,此处 60 的镜像号码为 6,前导零被忽略。

提示:

  • 0 <= nums.length <= 10^6
  • 0 <= nums[i] <= 10^9

思路分析

首先我们要先理解一下题意,最主要的就是这个公式:镜像号码 A + 原号码 B = 镜像号码 B + 原号码 A,我们需要在所有号码中找到所有符合这个公式的组合数。

首先数据的规模为:

  • 0 <= nums.length <= 10^6
  • 0 <= nums[i] <= 10^9

因此我们不能直接暴力进行匹配,暴力的话我们需要进行双重遍历,时间复杂度为 10^6 * 10^6 = 10 ^ 12,这样很明显会超时,所以我们需要重新想想有没有其他更加简便的方法来解决这道题。

我们假设有两个数 ab,令镜像a = a + x,镜像b = b + y,将其代入公式镜像号码 A + 原号码 B = 镜像号码 B + 原号码 A,我们可以得到:a + x + b = b + y + a,化简可以得到x = y,也就是说要想等式成立,只需要x = y即可。

所以我们可以使用一个哈希表来记录每一个原号码与镜像号码之差x的数量,后面再对每一个x进行组合即可得出答案,具体步骤如下:

  • 1、获取号码的镜像
const getReverse = function(t){let temp = '';for(let j = t.length - 1; j >= 0; j--){temp += t[j];}return temp
};
  • 2、统计每一个镜像与原号码之差的数量
let map = new Map();
for(let i = 0; i < nums.length; i++){let temp = getReverse(nums[i] + '');temp = temp - nums[i];map.set(temp,(map.get(temp) || 0) + 1);
}
  • 3、计算组合数
let res = 0;
for(let key of map.keys()){let ind = map.get(key);res += ind * (ind - 1) / 2;res %= 10 ** 9 + 7;
}

完整代码如下:

AC代码

/*** @param {number[]} nums* @return {number}*/var numberOfPairs = function(nums) {let map = new Map();const getReverse = function(t){let temp = '';for(let j = t.length - 1; j >= 0; j--){temp += t[j];}return temp};for(let i = 0; i < nums.length; i++){let temp = getReverse(nums[i] + '');temp = temp - nums[i];map.set(temp,(map.get(temp) || 0) + 1);}let res = 0;for(let key of map.keys()){let ind = map.get(key);res += ind * (ind - 1) / 2;res %= 10 ** 9 + 7;}return res;
};

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

这篇关于可以读通讯稿的组数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/510862

相关文章

第十二周项目二(1)求N组数的最大公约数

问题及代码: /**Copyright (c) 2014,烟台大学计算机学院*ALL right reserved*文件名;frist.cpp*作者;童宇*完成日期2014年11月13日*版本号v1.0*问题描述:求N组数的最大公约数*输入描述:输入组数N,再输入N组数*程序输出:N组数的最大公约数*/#include <iostream>using namespace

最大组数的“素数伴侣”

若两个正数之和为素数,则这两个数称之为“素数伴侣”。利用此特性找出给定数组中最大的“素数伴侣”对数。 (笔记模板由python脚本于2024年05月11日 18:17:40创建,本篇笔记适合熟悉基本编程且了解素数的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 pyt

1003 不确定组数的A+B

#include<iostream>using namespace std;int main(){int a,b;while(cin>>a>>b&&a!=0||b!=0){cout<<a+b<<endl;}return 0;}

2359. 找到离给定两个节点最近的节点;1781. 所有子字符串美丽值之和;2406. 将区间分为最少组数

2359. 找到离给定两个节点最近的节点 核心思想:统计node1和node2分别到每个点的距离,然后在枚举每个点统计结果。关键在于如何统计node到每个点的距离,首先是初始化为inf很重要,因为在枚举的时候,因为是inf代表了这个节点无法到达,在统计的时候不是用的递归而是用的循环,其中包含了处理特殊情况环,思想简单代码还是有点难度。 1781. 所有子字符串美丽值之和 核心思想:枚举每

【LeetCode每日一题】2645. 构造有效字符串的最少插入数(计算组数+动态规划+考虑相邻字母)

2024-1-11 文章目录 [2645. 构造有效字符串的最少插入数](https://leetcode.cn/problems/minimum-additions-to-make-valid-string/)方法一:计算组数方法二:动态规划方法三: 考虑相邻字母 2645. 构造有效字符串的最少插入数 方法一:计算组数 1.用count统计,能构成几组abc

计算机活动宣传稿,校园活动通讯稿模板

校园活动通讯稿模板 校园一般都会举办很多活动的,当校园活动结束后往往需要写通讯稿,以下是校园活动通讯稿模板,欢迎阅览! 校园活动通讯稿模板1 近日,商丘市前进小学社团活动正式拉开序幕,此次活动开设了美术、书法、跆拳道、武术、足球、篮球、科技制作、计算机、非洲鼓等十余个活动,执教的社团老师均为学校的各科骨干教师。他们根据所教学科的特点,结合学生的兴趣,将社团活动课与中华优秀传统文化相结合,与影视

计算机专业导学的新闻稿,计算机系教研活动通讯稿

计算机系教研活动通讯稿 为促进教师授课水平的不断提高,培养教师把握新开设专业课程,理解教材、处理教材的能力,促进课堂教学效果的提升,达到以“说”促“教”的目的,12月2号下午,计算机系在南校区图书楼201系办公室如期举办了一次全系教师参加,以教师说课为内容的教研活动。 本次说课由计算机系樊红芳老师主讲,内容为物联网专业新开设课程MATLAB。在说课过程中,樊红芳老师结合PPT从教材、学生、教学方

小学教师计算机应用培训通讯稿,宝安区中小学骨干教师信息技术应用能力提升高级研修班通讯稿(3)...

原标题:宝安区中小学骨干教师信息技术应用能力提升高级研修班通讯稿(3) 怀惴教育梦想,心系宝安发展,在10月12日宝安区中小学骨干教师信息技术应用能力提升高级研修班的学员们开始了新的一天学习。 上午在华东师大的报告厅里,我们聆听了肖家芸特级教师的《名师教学智慧与课堂教学质效的提升策略》专题讲座。 肖老师对新常态的三元组成进行了定义:包括互联网+;核心素养背景下的新课改;高考综合改革。肖老师认为

【算法题】合法分组的最少组数

题目: 给你一个长度为 n 下标从 0 开始的整数数组 nums 。 我们想将下标进行分组,使得 [0, n - 1] 内所有下标 i 都 恰好 被分到其中一组。 如果以下条件成立,我们说这个分组方案是合法的: 对于每个组 g ,同一组内所有下标在 nums 中对应的数值都相等。 对于任意两个组 g1 和 g2 ,两个组中 下标数量 的 差值不超过 1 。 请你返回一个整数,表示得到一个合

力扣100097. 合法分组的最少组数(哈希+贪心)

题目描述: 给你一个长度为 n 下标从 0 开始的整数数组 nums 。 我们想将下标进行分组,使得 [0, n - 1] 内所有下标 i 都 恰好 被分到其中一组。 如果以下条件成立,我们说这个分组方案是合法的: 对于每个组 g ,同一组内所有下标在 nums 中对应的数值都相等。对于任意两个组 g1 和 g2 ,两个组中 下标数量 的 差值不超过 1 。 请你返回一个整数,表示得到一