[M模拟] lc3265. 统计近似相等数对 I(模拟+代码实现+分类讨论+周赛412_2)

本文主要是介绍[M模拟] lc3265. 统计近似相等数对 I(模拟+代码实现+分类讨论+周赛412_2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1. 题目来源
    • 2. 题目解析

1. 题目来源

链接:3265. 统计近似相等数对 I

2. 题目解析

这场周赛并没有参加,补下题。

T2 思路:

  • 比较简单直接的一个模拟哈,数据量非常非常小,想怎么写都行。
  • 注意代码实现细节。
    • 当 1001 与 11 此类时,因为允许前导零的存在,所以也是成立的。
    • stoi 可以比较快速的将含有前导 0 的字符串转为 int,就不用自己去判断了。
    • 自己再判断的时候,需要判断 前面是不是全部都是前导0 && 后面的要和另一个串完全相等。
    • 注意用临时字符串进行 swap 操作,或者要进行恢复现场的操作。

上面的模拟情况多,容易错…简单暴力模拟思路:

  • 枚举 a, b。再枚举 a, b 中的较长的一个,交换它自身的所有数位,判断是否存在与 b 相等的字符串即可。
  • 注意此时数位可以相等,代表不交换。
  • 注意此时应该用较长的字符串进行数位的枚举,如果是单纯的枚举 a 或者 b 的情况下,可能由于它的数位较短,而无法进行交换到较长数位的字符串中取。例如:10、1 这个情况。

  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( 1 ) O(1) O(1)

简洁写法:

class Solution {
public:int countPairs(vector<int>& nums) {int res = 0;int n = nums.size();auto ok = [&](string a, string b) -> bool {if (a.size() > b.size()) swap(a, b); // 遍历字符串较长的一方。它有更多的机会去交换,与短的一方相等for (int k = 0; k < b.size(); k++) {for (int q = k; q < b.size(); q++) {string tb = b; swap(tb[k], tb[q]);if (stoi(tb) == stoi(a)) return true;}}return false;};for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) res += ok(to_string(nums[i]), b = to_string(nums[j]));return res;}
};

分类讨论:

class Solution {
public:int countPairs(vector<int>& nums) {int res = 0;int n = nums.size();for (int i = 0; i < n; i ++ ) {for (int j = i + 1; j < n; j ++ ) {string a = to_string(nums[i]), b = to_string(nums[j]);// 判断是否本身相等if (a == b) { res ++ ; continue; }// 判断长度不相等的情况。较长一方必须要有前导 0 存在// 注意 11、1001 这种情况的出现,所以长度差是 >= 1 而非 == 1int na = a.size(), nb = b.size();if (abs(na - nb) >= 1) {if (b.size() > a.size()) swap(a, b);    // 将 a 视作较长的串for (int i = 0; i < a.size(); i ++ ) {if (a[i] != '0') continue;// 较长串的每个 0 都需要和首位去做一下 swap 操作,判断是否可以组成答案bool flag = true;string t = a;swap(t[0], t[i]);int k = a.size() - 1;// 判断前面需要全部都是前导零int diff = a.size() - b.size();for (int j = 0; j < diff; j ++ ) if (t[j] != '0') {flag = false;break;}// 判断剩余的有效位是否和 b 相等for (int j = b.size() - 1; j >= 0; k -- , j -- ) {if (t[k] != b[j]) {flag = false;break;}}if (flag) {res ++ ; break; }// 这是最简单的判断方法.....忘记了// if (stoi(t) == stoi(b)) { res ++; continue; }}continue;}int l = -1;for (int i = 0; i < a.size(); i ++ ) {if (l == -1 && a[i] != b[i]) {l = i;continue;}if (a[i] != b[i]) {swap(a[l], a[i]);if (a == b) res ++ ;break;}}}}return  res;    }
};

这篇关于[M模拟] lc3265. 统计近似相等数对 I(模拟+代码实现+分类讨论+周赛412_2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

在Java中将XLS转换为XLSX的实现方案

《在Java中将XLS转换为XLSX的实现方案》在本文中,我们将探讨传统ExcelXLS格式与现代XLSX格式的结构差异,并为Java开发者提供转换方案,通过了解底层原理、性能优势及实用工具,您将掌握... 目录为什么升级XLS到XLSX值得投入?实际转换过程解析推荐技术方案对比Apache POI实现编程

IDEA如何实现远程断点调试jar包

《IDEA如何实现远程断点调试jar包》:本文主要介绍IDEA如何实现远程断点调试jar包的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录问题步骤总结问题以jar包的形式运行Spring Boot项目时报错,但是在IDEA开发环境javascript下编译