3.25_442.数组_统计数组中的元素_数组中重复的数据(middle)

给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。

找到所有出现两次的元素。

你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?

  • 示例:

  • 输入:

    [4,3,2,7,8,2,3,1]

  • 输出:

    [2,3]

本题和448实际上是同一道题目,只不过问法不一样,这道题目有三种问法找只出现一次的数找出现两次的数找未出现即缺失的数

本题代码:

class Solution:
    def findDuplicates(self, nums: List[int]) -> List[int]:
        #[4,3,2,7,8,2,3,1] 对于这个数组,首先出现4,我们就把 index(4-1)* -1,这样循环一次这个数组就变成 [-4, 3, 2, -7, 8, 2, -3, -1],算法对于 index 4 和 5 是访问不到的 所以他们不是负数,index 1 和 2 是可以访问到的,但发现访问的时候存储的值是正数,说明这个数乘了两次-1,也就是出现了两次(而448题要把遍历到的都变成负数,使用条件语句判断已经是负数就不操作了)。
        ans = []
        for num in nums:
            nums[abs(num) - 1] *= -1
            if nums[abs(num) - 1] > 0:
                ans.append(abs(num))
        nums = [abs(i) for i in nums]
        return set(nums) - set(ans)

        '''
        #如果题目要求找到只出现一次的数。代码如下:
        ans = []
        for num in nums:
            nums[abs(num) - 1] *= -1
            if nums[abs(num) - 1] > 0:
                ans.append(abs(num))
        nums = [abs(i) for i in nums]
        return set(nums) - set(ans)
        '''

        '''
        #题目448要求找到缺失的数,
        一道题有三种出法:找只出现一次、出现两次和未出现过,
        448题代码如下:
        for num in nums:
            if nums[abs(num) - 1] > 0:
                nums[abs(num) - 1] *= -1
        ans = []
        for i in range(len(nums)):
            if nums[i] > 0:
                ans.append(i + 1)
        '''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: cmake-3.25.1-linux-x86_64.tar.gz 是一个 Linux 平台上的 CMake 软件包。CMake 是一个开源的跨平台构建工具,广泛被用于构建 C/C++ 项目。这个特定版本的 CMake 是为了 Linux 64 位操作系统设计的。 压缩文件的扩展名 .tar.gz 表示它是一个使用 gzip 压缩的 tar 归档文件。tar 格式用于将多个文件和目录打包为单个文件,而 gzip 则用于压缩这个打包文件以减小其大小。因此,cmake-3.25.1-linux-x86_64.tar.gz 文件是经过压缩的 CMake 软件包。 要使用这个 CMake 软件包,首先需要在 Linux 64 位操作系统上安装 gzip 和 tar 工具。然后,通过使用以下命令解压缩: ``` tar -xzvf cmake-3.25.1-linux-x86_64.tar.gz ``` 这会将 tar 归档文件解压缩到当前目录,并还原为原始的文件和目录结构。解压缩后,你可以在目录中找到包含 CMake 二进制文件和其他相关文件的文件夹。 要使用 CMake,你可以切换到解压缩后的目录,并使用其中的二进制文件来运行 CMake 命令。例如,你可以通过运行以下命令来检查 CMake 的版本: ``` ./cmake-3.25.1-linux-x86_64/bin/cmake --version ``` 从而确认是否成功安装。 这就是我对于 cmake-3.25.1-linux-x86_64.tar.gz 的回答,希望对你有所帮助。 ### 回答2: cmake-3.25.1-linux-x86_64.tar.gz是一个CMake软件的压缩文件,适用于Linux操作系统的64位架构。CMake是一个开源的跨平台构建工具,主要用于自动化管理和构建软件项目。 该压缩文件中的.tar.gz扩展名表明它是一个经过tar和gzip压缩的文件。.tar是用于打包多个文件的文件格式,而.gz是gzip压缩算法的文件格式。因此,要使用该压缩文件,我们首先需要解压缩它。 在Linux系统中,可以使用tar命令来解压缩.tar.gz文件。可以在终端中通过执行以下命令来解压缩cmake-3.25.1-linux-x86_64.tar.gz文件: ``` tar -zxvf cmake-3.25.1-linux-x86_64.tar.gz ``` 执行以上命令后,压缩文件将被解压缩到当前目录中,并生成一个名为cmake-3.25.1-linux-x86_64的文件夹。在该文件夹中,你将可以找到CMake软件的可执行文件和其他相关文件。 一旦解压缩完成,你可以按照CMake的文档进行安装和配置。一般情况下,你可以通过运行以下命令来安装CMake: ``` cd cmake-3.25.1-linux-x86_64 ./bootstrap make sudo make install ``` 以上命令将进入解压后的文件夹,运行bootstrap脚本来配置CMake,接着运行make命令来编译CMake的可执行文件,最后使用sudo make install命令以管理员权限安装CMake。 安装完成后,你就可以使用cmake命令来生成、编译和安装各种不同的软件项目了。 ### 回答3: cmake-3.25.1-linux-x86_64.tar.gz是一个CMake软件的压缩包,用于在Linux操作系统的x86_64架构上安装CMake软件。CMake是一个跨平台的自动化构建工具,用于管理项目的编译过程。 这个压缩包采用了标准的tar.gz文件格式,其中"cmake-3.25.1"表示软件的版本号,"linux-x86_64"表示适用于Linux操作系统的x86_64架构。 要安装该软件,首先需要将压缩包解压缩。可以使用命令行工具如tar来进行解压缩操作。解压缩后,可以在目标文件夹中找到CMake的可执行文件以及相关的库文件和配置文件。 接下来,可以根据需要将CMake软件的路径添加到系统的环境变量中,以便可以在任何位置使用cmake命令。这样,用户就可以在命令行中运行cmake命令,管理项目的构建过程,生成Makefile文件以及控制项目的编译和安装。 CMake具有强大的跨平台性能,可以与各种编译器和构建系统配合使用。它使用一种类似于脚本的语言来描述项目的构建过程,同时支持多个操作系统和编程语言。 总之,CMake是一个非常实用的自动化构建工具,可以帮助开发者更方便地管理项目的编译过程。通过安装cmake-3.25.1-linux-x86_64.tar.gz,用户可以在Linux操作系统的x86_64架构上使用CMake软件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值