查找出现一次的数字2024年8月29日 | 阅读 7 分钟 假设有一个数组,其中所有元素都出现了三次,只有一个元素只出现一次。找出那个只出现一次的元素。我们应该以 O(n) 的时间复杂度和 O(1) 的额外空间来解决这个问题。 示例输入: arr[] = {2, 5, 6, 6, 5, 1, 3, 3, 5, 1, 1, 5} 输出 2 除了 2 出现一次外,输入数组中的每个元素都出现了三次。 输入: arr[] = {10, 19, 21, 20, 21, 10, 19, 19, 10} 输出 20 除了 20 出现一次外,输入数组中的每个元素都出现了多次。 排序允许我们在 O(n Logn) 的时间内完成任务。我们也可以使用哈希,它需要更多的空间,但最坏情况下的时间复杂度是 O(n)。 方法 - 1目标是利用位运算符提供一个 O(n) 时间和 O(1) 额外空间的解决方案。由于所有元素的出现次数都是奇数,因此解决方案不像以前基于 XOR 的方法那样直接。 对于数组中的每个元素,执行一个循环。在每次迭代结束时保持以下两个值不变。
然后我们返回“one”的值。 如何维护 'one' 和 'two' 的值?我们将两个变量 'one' 和 'two' 初始化为 0。在每次迭代中,我们将找到当前元素和 'one' 前一个值之间的共同位。我们将这些共同位添加到变量 'two' 中。对于这个操作,我们将使用 XOR。Two 中会包含一些额外的位,我们稍后会移除它们。 通过将当前元素与 'one' 的前一个值进行 XOR 来更新 'one'。一些位可能出现三次。我们稍后会移除这些额外的位。 代码 输出 The element that occurs only once is 2 时间复杂度: 此方法的最佳时间复杂度为 O(n),其中 n 是数组中的元素数量。 辅助空间: 由于我们只创建了常量,因此此方法使用 O(1) 的额外内存空间。 方法 - 2这是另一种方法,时间复杂度为 O(n),额外空间为 O(1)。对于所有整数,我们可以将相同位置的位相加,然后取该和与 3 的模。总和不是 3 的倍数的位是只出现一次的数字的位。 例如,我们将考虑数组 [6, 6, 6, 8]。它们是 110, 110, 110, 1000 (第一位之和) % 3 = (0 + 0 + 0 + 0) % 3 = 0; (第二位之和) % 3 = (1 + 1 + 1 + 0) % 3 = 0; (第三位之和) % 3 = (1 + 1 + 1 + 0) % 3 = 0; (第四位之和) % 3 = (1) % 3 = 1; 因此,只出现一次的数字是 1000(二进制),即 8。 注意:此算法不适用于负数。这是该算法的实现。 代码 输出 The element that occurs only once is 2 时间复杂度: 此方法的最佳时间复杂度为 O(n),其中 n 是数组中的元素数量。 辅助空间: 由于我们只创建了常量,因此此方法使用 O(1) 的额外内存空间。 方法 - 3在第三种方法中,我们将使用以下公式: ( 3 * (不重复数组元素之和) - (所有数组元素之和) ) / 2 设数组为 arr[] = [2, 5, 6, 6, 5, 1, 3, 3, 5, 1, 1, 5, 3, 1] summ = (3 * (不重复数组元素之和) - (所有数组元素之和)) / 2 = (3 * (2 + 5 + 6 + 1 + 3) - (2 + 5 + 6 + 6 + 5 + 1 + 3 + 3 + 5 + 1 + 1 + 5 + 3 + 1)) / 2 = (3 * 17 - 47) / 2 = (51 - 47) / 2 = 2 (这是所需答案) 我们知道集合数据结构不包含重复元素。我们将使用此数据结构来查找数组不重复元素的总和。但是,在此数据结构上的插入过程的最坏成本为 O(log(n))。在这里,我们将使用 Python 集合。 这是该算法的实现。 代码 输出 The element that occurs only once is 2 时间复杂度: O(N log(N)) 辅助空间:O(N) 方法 - 4最后一种方法是使用 Counter 函数。 使用 Counter 是最直接的方法。以下是该方法中的算法。 我们将使用 Counter 函数查找数组中每个元素的频率。 我们将遍历 Counter 字典,并使用 if 条件检查当前键的值是否等于 1。 如果键的值为 1,则返回该键。 这是该方法中的实现。 代码 输出 The element that occurs only once is 2 时间复杂度:O(N) 辅助空间: O(1) 方法 #5:使用 count() 方法。我们可以使用 count() 方法查找元素的出现次数。如果 count() 方法返回 1,则该元素出现一次。
输出 The element with single occurrence is 2 时间复杂度:O(n^2) 辅助空间: O(1) 下一话题使用 Python 分析客户行为 |
:Python 函数简介 您准备好将您的物理计算提升到 Python 的更高层次了吗?如果是这样,那么您需要掌握 Python 函数。我们喜欢物理和 Python 的事实...
阅读 4 分钟
在本教程中,我们将编写 Python 代码来展平给定的链表。给定的链表由每个节点表示一个链表,并包含其类型的两个指针。第一个指针表示指向节点的指针,并且...
阅读 6 分钟
?字典是 Python 中键值对的集合。字典的键可用于访问其值。但是,有时您希望提取键值对并将其分配给变量。这就是字典解包的作用。要解包一个...
阅读 2 分钟
简介:在本教程中,我们将讨论 Python 中的列表推导式。Python 以帮助我们编写简洁、易于编写且几乎像英语一样易于阅读的代码而闻名。列表推导式是该语言最独特的特性之一,它允许我们创建...
阅读 6 分钟
乳腺癌是一种恶性疾病,由乳腺细胞的 unchecked 生长引起。诊断和治疗的进步使得早期治疗和诊断成为可能。女性和男性都应该注意以下症状和体征:一个……
14 分钟阅读
最小堆是一种满足堆属性的数据结构,该属性规定每个节点的值小于或等于其子节点。这意味着堆的最小值始终存储在根部。以下是该算法的...
阅读 8 分钟
我们已经讨论过边缘计算及其在 ious 教程中的各种功能。让我们扩展一下在边缘计算项目列表想法第一部分中讨论的想法。用于车辆边缘计算的深度强化学习型卸载调度项目描述:一种新的计算范式,称为车辆云…
阅读 12 分钟
| 生成安全的随机数 在本教程中,我们将学习一个有趣的 Python 模块,名为 secret。我们还将学习它的方法以及它与 random 模块的区别。它发布于 Python 3.6,并被广泛称为...
5 分钟阅读
在接下来的教程中,我们将学习如何使用 Python 的 Tkinter 库构建一个简单的 GUI 计算器。我们将逐步学习整个代码片段。那么,让我们开始吧。使用 Tkinter 开始 GUI 计算器 Tkinter 库提供了最快……
阅读 24 分钟
什么是枚举?Python 中的枚举("enumeration" 的缩写)是表示一组唯一常量值的符号名称。它允许您定义一组相关值,与使用普通整数或字符串相比,这些值更具可读性和可维护性。枚举...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India