Java 中所有对的数字差总和2025年5月12日 | 阅读 5 分钟 给定一个正数 整数 数组,其中每个整数具有相同数量的数字。两个整数在相同位置出现的不同数字的数量称为它们之间的数字差。 应返回数组中每对数字之间数字差的总和。 示例 1 输入 arr = [12, 34] 输出 所有数字对的数字差总和 4 解释 12 的数字是:[1, 2] 34 的数字是:[3, 4] 因此,成对的绝对差 |1 - 3| = 2 |2 - 4| = 2 所以总和是:2 + 2 = 4 示例 2 输入 arr = [23, 45, 67] 输出 所有数字对的数字差总和 12 解释 对是:(23, 45), (23, 67), (45, 67) 它们之间的差是 |2 - 4| + |3 - 5| = 2 + 2 = 4 |2 - 6| + |3 - 7| = 4 + 4 = 8 |4 - 6| + |5 - 7| = 2 + 2 = 4 所以总和是:4 + 8 + 4 = 12 示例 3 输入 arr = [101, 202] 输出 所有数字对的数字差总和 2 解释 101 的数字是:[1, 0, 1] 202 的数字是:[2, 0, 2] 成对的绝对差是 |1 - 2| = 1 |0 - 0| = 0 |1 - 2| = 1 所以总和是:1 + 0 + 1 = 2 方法:使用频率数组表示数字为了优化比较过程,该程序使用二维频率数组跟踪所有整数中特定位置上每个数字的出现次数。它利用嵌套循环通过模运算快速提取数字来计算数字差,而无需显式创建对。该方法对于中等输入规模是有效的,因为它保证了 O(n * d + d * 100) 的复杂度,其中 n 是数组大小,d 是最大数字长度。基于位置的频率跟踪消除了重复计算的需要,并且使用数字频率的组合乘法来计算最终总和。 算法 步骤 1:鉴于数组中的每个数字都具有相同的长度,我们可以通过查看数组的第一个数字来确定其长度。 步骤 2:数字出现在所有整数的给定位置的次数由 digitFreq[pos][digit] 的值表示,可以将其创建为二维数组。 步骤 3:查找数组中每个整数在每个位置的数字,然后相应地更新 digitFreq 数组。 步骤 4:通过考虑不同数字频率的乘积来确定每个位置上存在差异的对的数量。 实施输出 Therefore the Total sum is: 6 复杂度分析 上述代码的时间复杂度为 O(N*D),其中 D 是数字的位数,N 是数组中的元素数量。空间复杂度为 O(N)。 方法:暴力成对比较算法该代码使用具有 O(n² * d) 复杂度的暴力成对比较方法,遍历数组中的每个唯一对。通过比较相应的位置并计算绝对差,它使用模 (%) 和除法 (/) 运算来提取数字。为了计算最终总和,嵌套循环确保处理每一对并将差值相加。与基于频率的方法相比,该方法消除了额外的数据结构,但会进行冗余计算。尽管这种方法易于使用,但其二次时间复杂度使其对于大型数据集无效。 算法 步骤 1:初始化 res = 0。 步骤 2:假设每个数字都有相同数量的位数,则确定第一个数字的位数 (d)。 步骤 3:逐一遍历数组中的每对数字 (i, j)。 步骤 4:从右到左逐个比较每对数字的匹配数字。 步骤 4.1:从两个数字中分别移除最后一个数字。 步骤 4.2:计算其绝对差后,将其添加到 res。 步骤 4.3:从每个数字中移除最后一个数字。 步骤 5:返回 res 作为所有数字差异的总和。 实施输出 Total sum: 6 复杂度分析 上述代码的时间复杂度为 O(N2),其中 N 是数组中的元素数量。空间复杂度为 O(1)。 下一主题DTO Java |
分数背包问题是一个优化问题,在计算机科学和运筹学中广泛用于解决问题。然而,与 0/1 背包问题不同的是,物品不必是完整的,因为在这种情况下允许分割它们以获得最大...
5 分钟阅读
在编程领域,识别数据集中的特定元素对于各种分析任务至关重要。其中一个问题是确定数组中的领导者元素。数组中的领导者定义为大于所有...
7 分钟阅读
Java 中的多线程 在 Java 中,多线程是指并发运行两个或多个线程的能力。在程序内可以独立运行的最小进程单元称为线程。多线程主要用于通过同时执行多个任务来提高程序性能。Java 的……
阅读 4 分钟
? Java 对象缓存为应用程序服务器使用 Java 程序提供内容时,为昂贵或经常使用的 Java 对象提供了缓存。存储的 Java 对象可以包含生成的页面或支持程序中的对象以帮助创建...
阅读 2 分钟
依赖倒置原则 (DIP) 是面向对象编程 (OOP) 的五项 SOLID 原则之一。它是一项指南,通过促进高层模块与低层模块的解耦,帮助编写灵活且可维护的代码。在 Java 编程的上下文中,依赖……
5 分钟阅读
在 Java 编程中,处理文件是开发人员经常遇到的常见任务。无论是从文件读取还是写入文件,选择要处理的特定文件,还是管理与文件相关的操作,拥有与文件系统交互的简单方法都至关重要。Java 的 FileDialog 类提供了……
阅读 8 分钟
在 Java 中,我们可以轻松地将 JSON 文件转换为字符串。将 JSON 文件转换为字符串是通过读取该文件的字节数据来完成的。为了将 JSON 文件转换为字符串,我们使用 nio(非阻塞 I/O)包(Java 编程语言 API 的集合...)
阅读 3 分钟
Java 中 Jdeps 和 Jdeprscan 工具之间的区别 在开发和维护 Java 应用程序时,有助于依赖分析和识别已弃用 API 的工具是无价的。Java 平台提供的两个此类工具是 Jdeps 和 Jdeprscan。尽管它们的目的看似相似,但这两个...
阅读 3 分钟
在 Java 中,@SuppressWarnings 被定义为一个注解,用于抑制或忽略编译器由于特定代码而引发的特定警告。简单来说,@SuppressWarnings 注解指示编译器忽略或跳过特定的...
阅读 4 分钟
java.text.RuleBasedCollator 类有一个 equals() 函数。Collator 类用于确定提供的两个字符串是否相同。语法:public boolean equals(String source, String target) 参数:此方法需要两个字符串来比较两个字符串。返回……
阅读 2 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India