【哈希表】【字符串】个人练习-Leetcode-1814. Count Nice Pairs in an Array

题目链接:https://leetcode.cn/problems/count-nice-pairs-in-an-array/description/

题目大意:给出一个数列nums[],求nice对 ( i , j ) (i, j) (i,j)对数。nice对满足0 <= i < j < nums.lengthnums[i] + rev(nums[j]) == nums[j] + rev(nums[i]),其中rev()是反转操作。

思路:一开始的思路是伪加法,取一个对,从低位开始加nums[i] + rev(nums[j]) nums[j] + rev(nums[i]),如果当前位不想等就返回false。能过样例,但nums[]太大时还是会超时。

class Solution {
public:bool iseq(string a, string b, string ra, string rb) {int p1 = a.size()-1, p2 = rb.size()-1, p3 = b.size()-1, p4 = ra.size()-1;int c1 = 0, c2 = 0;while (p1 >= 0 || p2 >= 0 || p3 >= 0 || p4 >= 0) {int v1 = c1;if (p1 >= 0) {v1 += (a[p1]-'0');p1--;}if (p2 >= 0) {v1 += (rb[p2] - '0');p2--;}                c1 = v1 / 10;v1 %= 10;int v2 = c2;if (p3 >= 0) {v2 += (b[p3]-'0');p3--;}if (p4 >= 0) {v2 += (ra[p4] - '0');p4--;}     c2 = v2 / 10;v2 %= 10;if (v1 != v2)return false;}if (c1 != c2)return false;return true;}int countNicePairs(vector<int>& nums) {vector<string> arr;vector<string> rev;for (auto x : nums) {string tmp = to_string(x);arr.emplace_back(tmp);while (tmp.back() == '0')tmp.pop_back();if (tmp.length() == 0)tmp = "0";reverse(tmp.begin(), tmp.end());rev.emplace_back(tmp);}int ans = 0;const int MX = 1e9+7;for (int i = 0; i < nums.size()-1; i++) {for (int j = i+1; j < nums.size(); j++) {if (iseq(arr[i], arr[j], rev[i], rev[j]))ans = (ans+1) % MX;}}return ans;}
};

看了题解才发现可以转换原等式为nums[i] - rev(nums[i])) == nums[j] - rev(nums[j]),设 f ( x ) = n u m s [ x ] − r e v ( n u m s [ x ] ) f(x)=nums[x]-rev(nums[x]) f(x)=nums[x]rev(nums[x]),用一个哈希表记录 f ( x ) f(x) f(x)的值,这样复杂度就降为 O ( N ) O(N) O(N)了。

完整代码

class Solution {
public:int countNicePairs(vector<int>& nums) {int ans = 0;const int MOD = 1e9+7;unordered_map<int, int> tb;for (auto num : nums) {string tmp = to_string(num);reverse(tmp.begin(), tmp.end());ans = (ans + tb[num - stoi(tmp)]) % MOD;tb[num - stoi(tmp)]++;}return ans;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/866482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue打包文件dist放在SpringBoot项目下运行(正确实现全过程)

项目开发中&#xff0c;一般我们都会使用SpringBootVue进行前后端开发。 在部署时&#xff0c;会后端启动一个服务&#xff0c;再启动一个nginx&#xff0c;nginx中配置前端打包文件dist进行项目访问。 实际上&#xff0c;我们也可以把打包好的dist目录放在SpringBoot项目下进…

【Android面试八股文】Android 有哪些存储数据的方式?

在Android平台上,有多种方式可以存储数据,每种方式都适合不同类型的数据和使用场景。以下是主要的存储数据方式: SharedPreferences(轻量级数据存储): SharedPreferences是用于存储简单键值对数据的最简单方法,适合存储用户偏好设置、配置信息等。数据以XML文件形式存储…

Os-hackNos

下载地址 https://download.vulnhub.com/hacknos/Os-hackNos-1.ova 环境配置如果出现&#xff0c;扫描不到IP的情况&#xff0c;可以尝试vulnhub靶机检测不到IP地址解决办法_vulnhub靶机扫描不到ip-CSDN博客 信息收集 确定靶机地址&#xff1a; 探测到存活主机192.168.111.…

如何利用AI撰写短文案获客?分享6大平台和3大步骤!

从去年开始&#xff0c;很多大厂都在裁员&#xff0c;原因就是因为AI的火爆&#xff0c;替代了很多机械式的劳动力。以前很多人可以通过机械式的工作来摸鱼&#xff0c;现在AI完成的效率比人工的要高很多倍。 国内好用的AI平台非常多&#xff0c;有时候也可以使用几个AI平台结合…

专业的酱酒鉴评方法及要求

在探讨酱酒鉴评的领域&#xff0c;我们不仅需要关注鉴评的基本方法&#xff0c;还要深入了解品评环境的设置、品酒杯的选择以及品酒员的专业素质。这些因素共同构成了酱酒鉴评的完整体系&#xff0c;确保了鉴评结果的科学性和准确性。 酱酒鉴评的基本方法 酱酒鉴评主要依赖于…

软件设计之Java入门视频(11)

软件设计之Java入门视频(11) 视频教程来自B站尚硅谷&#xff1a; 尚硅谷Java入门视频教程&#xff0c;宋红康java基础视频 相关文件资料&#xff08;百度网盘&#xff09; 提取密码&#xff1a;8op3 idea 下载可以关注 软件管家 公众号 学习内容&#xff1a; 该视频共分为1-7…

STM32学习历程(day2)

GPIO解释 GPIO(General-purpose input/output) 可以配置为八种输入输出模式 引脚电平 0V-3.3V 部分引脚可容忍5v 输出模式可控制端口输出高低电平 用以驱动LED、控制蜂鸣器、模拟通信协议输出时序 输入模式可读取端口的高低电平或电压&#xff0c;用于读取按键输入、外界…

反序列化POP链技术详解

POP&#xff08; Procedure Oriented Programming &#xff09;链是反序列化安全问题中相对比较重要的技术点&#xff0c;相比于其他的反序列化问题&#xff0c;这种漏洞的产生更加难以发现&#xff0c;以及在利用上也比较复杂。 要掌握这个东西首先要先了解面向对象中的几个特…

利用coredump获取程序调用通路

一些前置知识 原文链接&#xff1a;https://blog.csdn.net/tenfyguo/article/details/8159176 一、什么是coredump 我们经常听到大家说到程序core掉了&#xff0c;需要定位解决&#xff0c;这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止&a…

MUNIK解读CMMI-带你认识什么是CMMI

1、什么是CMMI? CMMI是Capability Maturity Model Integration&#xff08;能力成熟度模型集成&#xff09;的简称&#xff0c;用于评估软件开发商的质量和能力。CMMI模型最初为美国国防部创建&#xff0c;后被广泛应用于其他领域&#xff0c;通过一整套过程改进实践&#xf…

uniapp自定义富文本现实组件(支持查看和收起)

废话不多说上代码 CollapseText.vue <template><view v-if"descr"><scroll-view class"collapse-text" :style"{maxHeight: computedMaxHeight}"><!-- <slot></slot> --><rich-text :nodes"descr&q…

【力扣 896】单调数列 C++题解(循环)

如果数组是单调递增或单调递减的&#xff0c;那么它是 单调 的。 如果对于所有 i < j&#xff0c;nums[i] < nums[j]&#xff0c;那么数组 nums 是单调递增的。 如果对于所有 i < j&#xff0c;nums[i]> nums[j]&#xff0c;那么数组 nums 是单调递减的。 当给定…

2-网页请求的原理

网页请求的原理 ​ 网络爬虫请求网页的过程可以理解为用户使用浏览器加载网页的过程&#xff0c;这个过程其实是向Web服务器发送请求的过程&#xff0c;即浏览器向Web服务器发送请求&#xff0c;Web服务器会将响应内容以网页形式返回给浏览器。因此&#xff0c;了解浏览器与We…

C语言 求球反弹的距离和高度

这个程序计算一个球从 100 米高度自由落下&#xff0c;并在第 10 次落地时经过的总距离及第 10 次反弹的高度。 #include <stdio.h>int main() {int n 10;double height 100.0;double totalDistance height;for (int i 1; i < n; i) {height / 2;totalDistance …

Android Studio下载Gradle特别慢,甚至超时,失败。。。解决方法

使用Android studio下载或更新gradle时超级慢怎么办&#xff1f; 切换服务器&#xff0c;立马解决。打开gradle配置文件 修改服务器路径 distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-7.3.3-bin.zip 最后&#xff0c;同步&#xff0c;下载&#xff0c;速…

数据融合工具(1)指定路径下同名图层合并

情景再现&#xff0c;呼叫小编 ————数据合并时&#xff0c;你是否也经常碰到这些情况&#xff1f; 数据存在几何错误&#xff0c;合并失败&#xff01; 数据字段类型不一致&#xff0c;合并失败&#xff01; 合并工具运行有警告信息&#xff0c;不知道是否合并成功&…

2024年中国网络安全市场全景图 -百度下载

是自2018年开始&#xff0c;数说安全发布的第七版全景图。 企业数智化转型加速已经促使网络安全成为全社会关注的焦点&#xff0c;在网络安全边界不断扩大&#xff0c;新理念、新产品、新技术不断融合发展的进程中&#xff0c;数说安全始终秉承科学的方法论&#xff0c;以遵循…

航模插头篇

一、常见的电池插头&#xff08;电调端 是公头 电池端 是母头&#xff09; 电池总是被插的 1.XT60头 过流大 安全系数高 难插拔 2.T插 插拔轻松 过流比较小 容易发烫 电调端 是公头 电池端 是母头 3.香蕉头插孔 过流够 插拔轻松 但 容易插反 爆炸 4.TX90(和XT60差…

如何在Java中实现全文搜索功能

如何在Java中实现全文搜索功能 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 全文搜索是现代应用程序中常见的需求&#xff0c;特别是在需要对大量文本数据进…

完整篇-Python数据类型转换

目录 1、「整数到浮点数」&#xff1a; 2、「浮点数到整数」&#xff1a; 3、「字符串到整数」&#xff1a; 4、「字符串到浮点数」&#xff1a; 5、「整数到字符串」&#xff1a; 6、「浮点数到字符串」&#xff1a; 7、「布尔值到整数」&#xff1a; 8、「列表到元组…