首页 > 其他分享 >剑指 Offer 03. 数组中重复的数字

剑指 Offer 03. 数组中重复的数字

时间:2023-05-12 22:12:48浏览次数:37  
标签:03 数字 nums int 复杂度 Offer 重复 数组

剑指 Offer 03. 数组中重复的数字
题目描述

找出数组中重复的数字。

在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

2 = n <= 100000

解法

1.先进行排序,再从第一个元素开始逐一比较,碰到重复的就返回值。 时间复杂度O(nlogn) 空间复杂度O(1)

2.new一个hash表将数组元素一一遍历,遍历的过程中进行判断,假如该元素不在表中就加入到表中,假如该元素在表中说明重复了就返回值。 时间复杂读O(n) 空间复杂度O(n)

class Solution {
    public int findRepeatNumber(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < nums.length; i++) {
            if (set.contains(nums[i])){
                return nums[i];
            }else {
                set.add(nums[i]);
            }
        }
        return -1;  //返回-1说明没有重复的元素
    }
}

3.下标法,新建一个数组,遍历该数组,将每一个元素放入到新数组对应下标的位置,若新数组本位置没有数则放入,若有数则说明重复,具体方法跟hash原理类似,不做过多阐述。

4.置换法,因为题目提到了数字的范围是 0~n-1,数组长度为n,所以可以用置换法解决。具体做法为不停的进行元素交换,使得元素值与该元素的数组下标相等,即nums[i] == i。 时间复杂度O(n) 空间复杂度O(1)

class Solution {
    public int findRepeatNumber(int[] nums) {
        for (int i = 0; i < nums.length; i++){
            while (nums[i] != i){
                if (nums[i] == nums[nums[i]]){
                    return nums[i];
                }
                int j = nums[nums[i]];
                nums[nums[i]] = nums[i];
                nums[i] = j;
            }
        }
        return -1;
    }
}

从时间复杂度与空间复杂度来看为最优解。

标签:03,数字,nums,int,复杂度,Offer,重复,数组
From: https://www.cnblogs.com/Q1u-ovo/p/17396394.html

相关文章

  • 2023-05-12:存在一个由 n 个节点组成的无向连通图,图中的节点按从 0 到 n - 1 编号, 给你
    2023-05-12:存在一个由n个节点组成的无向连通图,图中的节点按从0到n-1编号,给你一个数组graph表示这个图,其中,graph[i]是一个列表,由所有与节点i直接相连的节点组成。返回能够访问所有节点的最短路径的长度。你可以在任一节点开始和停止,也可以多次重访节点,并且可以重......
  • 1103.模版变量及模版过滤器
    一、模版路径总结在配置文件setting.py文件中找到TEMPLATES进行文件路径配置:1.DIRS定义一个目录列表,模板引擎按流标顺序搜索这些目录以查询模板源文件。将templates放在主项目目录下:2.APP_DIRS告诉模板引擎是否应该进入每个已安装的应用中查找模板,值为True则模板会去安装了......
  • 树状数组--动态维护区间操作
    树状数组(二元索引树/二元下标树/BinaryIndexedTree,BIT/FenwickTree):树状数组虽名为数组,但从其英文名(BinaryIndexedTree)可看出它本质上是一种被表达为树的数据结构。对于大小为n的序列nums,最基本的树状数组以O(logn)时间复杂度同时支持如下两种操作。1)更......
  • 代码随想录算法训练营第三天|203.移除链表元素 、707.设计链表 、206.反转链表
    一.链表基础1.最后一个节点的指针域指向null(空指针的意思)。2.链表在内存中不是连续分布的。3.链表的长度可以是不固定的,并且可以动态增删,适合数据量不固定,频繁增删,较少查询的场景。1#链表节点的定义2classListNode:3def__init__(self,val,next=None):4......
  • fatal: detected dubious ownership in repository at 'D:/xxx'
     git的出现这个错误: 执行下面代码即可:gitconfig--global--addsafe.directory"*"; ......
  • target method '%s' found on bean target class '%s', but not found in any interf
    targetmethod'%s'foundonbeantargetclass'%s',butnotfoundinanyinterface(s)forbeanJDKproxy.Eitherpullthemethoduptoaninterfaceorswitchtosubclass(CGLIB)proxiesbysettingproxy-target-class/proxyTargetClass......
  • 1887. 使数组元素相等的减少操作次数
    1887.使数组元素相等的减少操作次数给你一个整数数组nums,你的目标是令nums中的所有元素相等。完成一次减少操作需要遵照下面的几个步骤:找出nums中的最大值。记这个值为largest并取其下标i(下标从0开始计数)。如果有多个元素都是最大值,则取最小的i。找出num......
  • Mitsubishi/三菱SFC顺控大型程序模板 1:三菱Q03UDE,500个IO点(5个输
    Mitsubishi/三菱SFC顺控大型程序模板1:三菱Q03UDE,500个IO点(5个输入模块、3个输出模块),带16轴伺服(由两个QD70P8控制)。2:超完美威纶触摸屏画面。3:全新的编程思维,即使是初学者也可以了解。4:做大型程序,完美的简化程序。5:适合没有做大型设备的工程师,对比较资深的工程师也有很大的......
  • 彻底删除IDEA 2022.03.03
     rm-rf/Users/XXX/Library/Preferences/jetbrains.jetprofile.asset.plistrm-rf/Users/XXX/Library/Preferences/com.jetbrains.*rm-rf/Users/XXX/Library/Caches/JetBrainsrm-rf/Users/XXX/Library/Application\Support/JetBrainsrm-rf/Users/XXX/Library/Logs/......
  • RuntimeError: Couldn't install gfpgan
    背景https://cloud.tencent.com/act/pro/gpu-study?from=20318tx云打折活动买来一台有V100(32G大显存)的云服务器,但是安装SD的时候由于网络原因出现各种问题:sd本身没法从github下载下来sd下载下来没法安装,也就是出现RuntimeError:Couldn'tinstallgfpgangfpgan安装后还有......