Java 中的 Codility 传递汽车问题2025年1月7日 | 阅读 4 分钟 Codility Passing Cars 问题 是众多典型的算法问题之一,其主要目标是确定在同一条道路上朝相反方向行驶的汽车的有效对的总数。 更具体地说,该问题要求计算向东行驶的汽车(由 0 表示)与向西行驶的汽车(由 1 表示)相遇的次数。 难度在于最有效地解决这个问题;也就是说,最好是 O(N) 时间复杂度,其中 N 是数组的总元素数量。 问题陈述给定一个由 N 个整数组成的数组 A,每个元素代表一辆汽车的方向
你的目标是定义(多少)对 (P, Q) 存在,其中 P 小于 Q,位置 P 的元素 A[P] = 0,位置 Q 的元素 A[Q] = 1。换句话说,你想知道一种量化从东方来的汽车会超车另一辆来自西方的车辆的概率的方法。 问题解决方案该解决方案利用了这样一个事实:对于每一个在西行车上的“1”,都有它前面的所有“0”代表东行车。这使得我们能够通过单次扫描数组来计算通过对,因此,时间复杂度将是 O(N)。 我们维护两个计数器
对于数组的每一次迭代,如果东行计数器(汽车)是 0,则 num_east 计数器加一。对于每一辆西行汽车(1),我们将 num_east 的当前值加到 num_pass 变量上,因为所有的东行汽车都会经过这辆西行汽车。 文件名:CodilityProblem.java 输出 Number of passing cars: 5 注意事项和边缘情况溢出处理:在更改 num_pass 计数器的操作结构之后,代码包含一个溢出检查。这很重要,因为通过对的数量可能会急剧增加,以至于超出 1,000,000,000 的值。如果发生这种情况,函数将返回 -1,这将表明发生了溢出情况。 边界情况:它还能很好地处理以下边界情况:
效率和性能因此,时间与输入大小成正比,对于更大的输入,给定的解决方案是最优的:时间复杂度为 O(N)。它只遍历整个数组一次,这使得它在输入数组大小方面非常高效。该解决方案的时间复杂度为 O(1),因为它使用了几个整数变量,因此也使得解决方案在内存方面非常高效。 结论这是一个使用数组和高效算法解决 Codility Passing Cars 问题的良好实践。鉴于其允许精确实现单次扫描计数通过对的能力,所提供的解决方案可以被认为是最佳且相对稳定的。 因此,它能够处理大量的输入和其他未知值,同时密切关注其结果的正确性以及运行时间在设定的限制内。 下一主题使用最少矩形覆盖曼哈顿天际线 |
? 链表是基本的数据结构,可以在计算机编程中高效地存储和操作数据。它们由节点组成,每个节点包含数据和指向列表中下一个节点的引用。在本文中,我们将探索 Java 中链表的各种操作,...
阅读 6 分钟
在 Java 中,赋值运算符用于为变量赋值。它用等号 (=) 表示。赋值运算符的类型 Java 中有两种赋值运算符。简单赋值运算符复合赋值运算符简单赋值运算符 (=) 用于赋值...
阅读 6 分钟
在 Java 中,mapToDouble() 方法是 Stream 接口的成员之一,该接口在 Java 8 中引入。它通过将给定的 ToDoubleFunction 应用于每个元素,将流的元素转换为原始双精度值,从而提供了一种高效的...
阅读 10 分钟
在 Java 中,创建对象的克隆或副本是一项非常重要的任务。在本节中,我们将讨论 Java 中的浅拷贝是什么以及如何创建 Java 对象的浅拷贝。在讨论浅拷贝之前,首先...
阅读 3 分钟
在 Java 中,StringIndexOutOfBoundsException 是一个运行时异常,当您尝试访问字符串中无效索引处的字符时会发生。尝试访问负索引或超出字符串长度范围的索引处的字符会导致此异常...
阅读 3 分钟
在大多数动态规划问题中,最常用的场景之一是从网格的左上角到右下角的不同路径数。然而,当目标设定在网格内部时,问题会变得复杂...
阅读 6 分钟
在本节中,我们将学习什么是 Peterson 数,以及如何通过 Java 程序检查给定的数字是否为 Peterson 数。Peterson 数 如果一个数字的每个数字的阶乘之和等于该数字本身,则称该数字为 Peterson 数...
阅读 2 分钟
凯撒密码是一种单表替换密码。它是最简单和最常用的加密技术之一。在这种技术中,给定文本的每个字母都被替换为字母表中固定数量位置以下的字母。例如,使用...
7 分钟阅读
二进制数在计算机科学中起着至关重要的作用。它仅使用数字 0 和 1 来显示信息。确定一个二进制数是否可被 3 整除需要理解模运算、数字和乘法。可以分析二进制数以...
5 分钟阅读
Java 代码结构和组织很大程度上依赖于包和接口。它们在各种情况下以及出于不同目的工作。本文将探讨 Java 包和接口背后的基本概念。包和接口都充当一种容器...
阅读 2 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India