You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写类方法找出[1,n]区间内重复出现的整数

找出数组中重复出现的整数

给定整数n(参数input2)和一个由[1, n]范围内整数组成的数组input1(每个整数仅出现1次或2次),请实现UserMainCode类的range类方法,返回数组中所有出现两次的整数。

示例

  • 输入1: (1,1,2)
  • 输入2: 3
  • 输出: {1}

解法1:哈希表统计(直观易实现)

遍历数组,用字典统计每个数字的出现次数,遇到已存在的数字就加入结果集合,最后返回该集合。这种方法逻辑简单,容易理解,时间复杂度为O(n),空间复杂度为O(n)。

代码实现

class UserMainCode(object):

    @classmethod
    def range(cls, input1, input2):
        count_map = {}
        duplicates = set()
        for num in input1:
            if num in count_map:
                duplicates.add(num)
            else:
                count_map[num] = 1
        return duplicates

解法2:数组下标标记(空间优化)

利用数组元素范围[1, n]与数组下标(0起始)的对应关系,通过修改原数组元素的符号来标记是否已访问过:遍历每个元素,取其绝对值对应的下标位置,若该位置元素为负,说明当前元素是重复项;否则将该位置元素取反标记为已访问。此方法时间复杂度O(n),空间复杂度O(1)(结果集合除外)。

代码实现

class UserMainCode(object):

    @classmethod
    def range(cls, input1, input2):
        duplicates = set()
        arr = list(input1)  # 将输入元组转为可修改的列表
        for num in arr:
            idx = abs(num) - 1
            if arr[idx] < 0:
                duplicates.add(abs(num))
            else:
                arr[idx] *= -1
        return duplicates

内容的提问来源于stack exchange,提问作者Food World

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 05:45:40