最大唯一数

Submission

运行时间: 27 ms

内存: 16.2 MB

from typing import List

class Solution:
    def largestUniqueNumber(self, nums: List[int]) -> int:
        freq = {}
        max_unique = -1
        
        # 统计每个数字的出现频率
        for num in nums:
            if num in freq:
                freq[num] += 1
            else:
                freq[num] = 1
        
        # 遍历字典,找到仅出现一次的最大整数
        for num, count in freq.items():
            if count == 1 and num > max_unique:
                max_unique = num
        
        return max_unique

solution = Solution()
nums = [5, 7, 3, 9, 4, 9, 8, 3, 1]
result = solution.largestUniqueNumber(nums)
print(result)  # 输出:8

Explain

这个题解的思路如下: 1. 首先,使用一个字典 `freq` 来统计数组中每个数字出现的频率。遍历数组 `nums`,对于每个数字,如果它已经在字典中,则将其对应的频率加 1;否则,将其频率初始化为 1。 2. 接下来,遍历字典 `freq`,找到仅出现一次且值最大的数字。初始化一个变量 `max_unique` 为 -1,表示当前找到的最大唯一数。对于字典中的每个键值对,如果该数字的频率为 1 且大于当前的 `max_unique`,则更新 `max_unique` 为该数字。 3. 最后,返回 `max_unique` 作为结果,即为仅出现一次的最大整数。如果不存在这样的数,则返回初始值 -1。

时间复杂度: O(n)

空间复杂度: O(n)

from typing import List

class Solution:
    def largestUniqueNumber(self, nums: List[int]) -> int:
        freq = {}  # 用于存储每个数字的出现频率
        max_unique = -1  # 初始化最大唯一数为 -1
        
        # 统计每个数字的出现频率
        for num in nums:
            if num in freq:
                freq[num] += 1
            else:
                freq[num] = 1
        
        # 遍历字典,找到仅出现一次的最大整数
        for num, count in freq.items():
            if count == 1 and num > max_unique:
                max_unique = num
        
        return max_unique  # 返回仅出现一次的最大整数,如果不存在则返回 -1

solution = Solution()
nums = [5, 7, 3, 9, 4, 9, 8, 3, 1]
result = solution.largestUniqueNumber(nums)
print(result)  # 输出:8

Explore

在统计频率时,使用字典来存储每个数字的频率。如果数组非常大,内存占用主要取决于数组中不同数字的数量。在最坏的情况下,即数组中每个元素都不相同,字典将需要存储与数组长度相等的条目数,这将显著增加内存使用。对于非常大的数组,这可能导致内存不足的问题,尤其是在内存资源有限的环境中。改善内存使用的一种方式可能是使用更内存效率高的数据结构,如计数排序或位图,尤其是当元素的范围已知且有限时。

算法已经考虑了所有数字都重复出现的情况。在算法中,如果所有数字都至少重复一次,那么字典遍历时不会找到任何频率为1的数字,因此变量 `max_unique` 将保持其初始化的值 -1。这意味着函数将正确返回 -1,表示数组中没有唯一数字。这符合题目要求的正确处理方式。

在遍历字典 `freq` 时,算法检查每个条目的频率是否为1(表示数字唯一),并与当前存储的最大唯一数 `max_unique` 比较。如果找到的唯一数字大于 `max_unique`,则更新 `max_unique` 的值。这保证了在遍历结束时,`max_unique` 存储的是所有唯一数字中的最大值。因此,通过这种方式,算法确保最终找到并返回的是最大的唯一数。

当前的实现已经可以正确处理空数组的情况。当输入数组 `nums` 为空时,字典 `freq` 也将为空,因此在遍历字典时不会有任何操作执行。变量 `max_unique` 将保持其初始值 -1,然后被返回。因此,该方法已正确处理空数组输入的情况,无需进行修改。