leetcode 287. 寻找重复数(java)

news/2024/10/31 1:34:21/

寻找重复数

  • leetcode 287. 寻找重复数
    • 题目描述
    • 解法一 Hash 表记录
    • 解法二 原地hash
  • 上期经典

leetcode 287. 寻找重复数

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-the-duplicate-number

题目描述

给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。
假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。
你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。

示例 1:
输入:nums = [1,3,4,2,2]
输出:2

示例 2:
输入:nums = [3,1,3,4,2]
输出:3

提示:
1 <= n <= 100000
nums.length == n + 1
1 <= nums[i] <= n
nums 中 只有一个整数 出现 两次或多次 ,其余整数均只出现 一次

进阶:
如何证明 nums 中至少存在一个重复的数字?
你可以设计一个线性级时间复杂度 O(n) 的解决方案吗?

解法一 Hash 表记录

用数组中的值做hash表中的key,我们一次循环下来,key 重复就是找到了.

代码演示

   public int findDuplicate1(int[] nums) {int n = -1;HashMap<Integer,Integer> ans = new HashMap<>();for(int i = 0;i < nums.length;i++){if(ans.containsKey(nums[i])){n = nums[i];break;}ans.put(nums[i],1);}return n;}

解法二 原地hash

数组长度为 n + 1,同时给定的 nums[i]都在 [1,n] 范围内,因此我们可以设定哈希规则为 nums[idx] = idx + 1,即数值 x 会放在下标 x - 1 的位置。

如此一来,对于只出现一次的数值而言,必然能够顺利放在目标位置,而出现多次的数值必然会因为位置冲突而被找出。

代码演示

    public int findDuplicate(int[] nums) {for(int i = 0; i < nums.length;){int t = nums[i];int c = t - 1;if(nums[c] == t){if(c != i){return t;} i++;}else{swap(nums,i,c);}}return -1;}void swap(int[]nums,int i,int j){int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}

上期经典

leetcode 987. 二叉树的垂序遍历


http://www.ppmy.cn/news/836481.html

相关文章

在终端中使用 solarized 配色

#- 第一步. git clone git://github.com/seebi/dircolors-solarized.git cp ~/dircolors-solarized/dircolors.256dark ~/.dircolors eval dircolors .dircolors#- 第二步. (先检查 echo $TERM vim .barshrc export TERMxterm-256color#- 第三步. git clone git://github.com/s…

Sunos内核版本对应的Solaris版本

SUNos简介 2010-02-01 11:46 Solaris 是Sun Microsystems研发的计算机操作系统。它被认为是UNIX操作系统的衍生版本之一。 目前Solaris仍旧属于私有软件。2005年6月14日&#xff0c;Sun公司将正在开发中的Solaris 11的源代码以CDDL许可开放&#xff0c;这一开放版本就是OpenSol…

有用的 Solaris 命令 [zt]

Solaris 中的命令非常之多&#xff0c;以致很难从中分离出那些很酷的命令。例如&#xff0c;有些命令报告程序进行每个系统调用时所要花费的时间&#xff0c;有些命令动态地显示系统活动信息&#xff0c;而且这些命令大部分都同时包含在了 Solaris 8 和 Solaris 9 中。这里&…

Solaris学习笔记

1. 32位操作系统&#xff08;CPU支持64位操作系统&#xff09;上使用VMWare安装Solaris10 32位系统时&#xff0c;提示系统没有支持64位系统的处理器&#xff0c;解决方案 2.使用root用户通过telnet登录 3.配置FTP 4.踢出已登录用户 5.查看系统当前运行级别 6.root用户通过…

【Linux】Squid 代理服务器应用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Squid 代理服务器应用 Squid 代理服务器代理的工作机制代理服务器的概念及其作用Squid 代理的类型 安装 Squid 服务编译安装 Squid修改 Squid 的配置文件Squid 的运行控制创建…

SolarWinds

当 Orion NPM SolarWinds 安装完成后&#xff0c;接下来就是如何配置 SolarWinds 相关参数&#xff0c;比如添加监控设备节点&#xff0c;监控哪些接口&#xff0c;客户端电脑如何通过 IE 访问等&#xff0c;本文将讲述与此相关的内容&#xff0c; 供大家参考。<?xml:names…

solaris下载地址

Solaris 10下载地址 第一张盘&#xff1a; [url]http://ftp3.cdut.edu.cn/solaris/x86/sol-10-b69-x86-v1.iso[/url] 第二张盘&#xff1a; [url]http://ftp3.cdut.edu.cn/solaris/x86/sol-10-b69-x86-v2.iso[/url] 第三张盘&#xff1a; [url]http://ftp3.cdut.edu.cn/solaris…

Solaris FAQ 1.2 转载

Solaris FAQ 1.2 /ns/wz/sys/data/20020822031150.htm Solaris FAQ 1.2维护: ultra <helponline263.net>版本: 1.2If a problem is not completely understood, it is probably best to provideno solution at all.单纯的论文工作使人浅薄---------爱因斯坦我常常回忆起…