Java 中打印数字中包含 1、2 和 3 的升序数字2025年5月12日 | 阅读 5 分钟 目标是以升序打印包含数字 1、2 和 3 的数字数组,并用逗号分隔。如果没有包含数字 1、2 和 3 的数字,则打印 -1。 示例 1 输入: num_arr[] = {9821, 627183, 12, 1234} 输出1234, 627183 解释 9821 → 包含 1 和 2,但缺少 3。 627183 → 包含 1、2 和 3 → 包含 12 → 包含 1 和 2,但缺少 3 → 不包含 1234 → 包含 1、2 和 3 → 包含 示例 2 输入: num_arr[] = {456, 789, 321, 2134} 输出2134, 321 解释 456 → 缺少数字 1、2 和 3 → 不包含 789 → 缺少数字 1、2 和 3 → 不包含 包含 1、2 和 3 → 包含 2134 → 包含 1、2 和 3 → 包含 示例 3 输入: num_arr[] = {100, 150} 输出-1 解释 范围 [100, 150] 内的数字都不包含第一个、第二个和第三个数字。 方法:使用 Collections.sort() 方法该软件使用 ArrayList 进行排序和动态存储,确保有效处理有效数字。它使用 String 操作 (contains()) 而不是数学运算来验证数字的存在,这使得验证更容易。 使用 Collections.sort() 可确保 O(N log N) 的排序复杂度。为了有效地连接字符串而不要求额外的内存分配,使用了 StringBuffer。该应用程序使用 O(N) 复杂度的迭代方法来扫描和过滤数字。 结合这些策略将确保完美实施和最佳性能。 算法步骤 1:创建一个空的 ArrayList<Integer> 来存储包含 1、2 和 3 的数字。 步骤 2:调用 findOneTwoThree(n) 迭代 num_arr 中的每个整数 n,以确定 n 是否包含 1、2 和 3。 步骤 3:如果为 true,则将 n 添加到列表中。 步骤 4:使用 Collections.sort (arr) 对列表进行升序排序。 步骤 5:创建一个 StringBuffer 来存储格式化后的输出。 步骤 6:在遍历排序列表时,使用“,”分隔每个数字,并将其附加到 StringBuffer。 步骤 7:如果 StringBuffer 为空,则返回“ -1”,否则返回格式化字符串。 步骤 8:使用函数 Integer.toString(n) 将 n 转换为字符串 s。 步骤 9:利用 s.contains() 确定 s 是否包含“1”、“2”和“3”。 步骤 10:如果三个数字都存在,则返回 true;否则返回 false。 实施输出 321, 2134 复杂度分析上述代码的时间复杂度为 O(N log(N)),其中 N 是给定数字的长度,空间复杂度为 O(N)。 方法:使用动态规划为了优化重复检查,代码通过 HashMap 使用记忆化存储先前计算的结果。模 (%) 和除 (/) 运算用于有效提取数字。通过监控足够数字的存在,布尔标志 (has1, has2, has3) 减少了不必要的迭代。为了减少不必要的计算,动态规划 (DP) 通过在记忆化中缓存结果来实现。ArrayList 用于列表方法中的有效插入,它确保了有效数字的动态存储。为了提高执行速度并降低计算成本,使用条件检查来优化函数调用。 算法 步骤 1:创建一个记忆化 HashMap<Integer, Boolean> 来存储先前验证过的整数及其结果。 步骤 2:如果 n 存在于记忆化中,则返回存储的结果。 步骤 3:使用 has1 = false、has2 = false 和 has3 = false 初始化布尔标志。 步骤 4:使用除法 (/10) 和模数 (% 10) 从 n 中提取数字。 步骤 5:如果数字是 1,则设置 has1 = true;如果数字是 2,则设置 has2 = true;如果数字是 3,则设置 has3 = true。 步骤 6:持续提取数字,直到 n 等于 0。 步骤 7:在记忆化中存储结果(如果所有三个数字都已找到,则为 true;否则为 false)。 步骤 8:返回结果。 步骤 9:为了存储有效数字,初始化一个空列表 res。 步骤 10:对 num_arr 中的每个 n 重复执行此操作 步骤 10.1:逐个遍历 num_arr 中的每个 n:调用 contains123(n)。 步骤 10.2:然后,如果返回 true,则将 n 添加到 res 中。 步骤 11:返回 res。 实施输出 [321, 2134] 复杂度分析上述代码的时间复杂度为 O(N log(M)),其中 N 是给定数字的长度,M 是 num_arr 中的最大数字。空间复杂度为 O(N)。 下一主题Java ASCII 表 |
Java 8 是 Java 平台的一次突破性发布,引入了大量新功能,其中 lambda 和 Stream API 最为突出。然而,一个经常被忽视的功能是 Compact Profiles,它提供了一种缩减 Java 运行时环境的方法...
阅读 3 分钟
二叉树数据结构中的每个节点在其结构中最多可以有两个子节点。叶子节点的数量是二叉树实践中的一个主要问题。叶子节点表示任何不存在右子节点的节点的最终归属...
5 分钟阅读
是组件的集合,即 JVM、JRE 和 JDK。它集成了解释和编译过程。它定义了创建 Java 程序所涉及的所有过程。它解释了程序被编译和执行的每一个步骤。
阅读 3 分钟
字符串压缩是计算机科学和编程中的一个基本问题,其目标是通过计算连续重复字符来压缩字符串。该问题的本质是更有效地表示字符串,尤其是在处理大型数据集时。这种技术在各种场景下都很有用...
7 分钟阅读
JavaTuples 库中的 KeyValue 类是一个专门的 Tuple,包含两个元素:一个键和一个值。它提供了一种比通用索引 Tuple 更有意义和自解释的方式来表示键值对。作为一个 Tuple,`KeyValue` 类拥有所有特征和...
11 分钟阅读
给定项数n,求级数0.6, 0.06, 0.006, 0.0006,...的前n项和。输入:n=4 输出:0.6666 解释:级数前4项和:0.6+0.06+0.006+0.0006= 0.66660 输入:n=5 输出:0.66666 解释:级数前5项和:0.6+0.06+0.006+0.0006+0.00006=0.66666 方法:使用等比数列公式...
阅读 6 分钟
QuickSort 是一种高效的分治排序算法,它递归地将数组划分为较小的子数组。多线程允许在不同分区上并行执行排序,利用多个处理器核心来减少执行时间。它允许程序同时执行两个或多个部分以...
5 分钟阅读
在 Java 中,main 方法用于控制台输出,在调试和用户指示时提供。它是 java.lang 包中 System 类的一部分,并且所有 Java 程序都可以继承它,而无需导入任何包。以下是详细介绍...
阅读 4 分钟
在本节中,我们将学习什么是自传数,并创建 Java 程序来检查给定的数字是否是自传数。自传数程序经常在 Java 编码测试中出现,用于检查程序员的逻辑。自传数一个数字的计数...
阅读 4 分钟
在 Java 中,对象的大小是通过其实例变量大小的总和来确定的。然而,当涉及到空类,即没有示例变量的类别时,对于内存量有多少的问题没有明确的答案……
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India