Hot100-寻找重复数

news2025/1/4 20:20:52

1 前言

给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。

假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。

 

1.1 暴力解法

两次for循环:时间复杂度O(n^2)

int right = nums.length;
        for (int i = 0; i < right; i++) {
            for (int j = i + 1; j < right; j++) {
                if (nums[i] == nums[j]) {
                    return nums[i];
                }
            }
        }
        return 0;

1.2 排序

时间复杂度:O(nlogn + n)。时间复杂度一般取决于你的排序算法

public int findDuplicate3(int[] nums) {
        Arrays.sort(nums);
        for (int i = 0; i < nums.length - 1; i++) {
            if (nums[i] == nums[i + 1]) {
                return nums[i];
            }
        }
        return 0;
    }

1.4 hash

时间复杂度O(n)

根据题目分析,我们发现有n + 1个数,每个数的大小范围在[1,n];

例如 nums = 【1,3,4,2,2】;

  • 当我们遍历到temp = nums[0] (也就是1)时,令idx = temp - 1(用来标记它应该放的位置);此时idx = 0;因此1的位置正确。
  • 当我们遍历到temp = num[1](也就是3)时,idx = temp - 1 = 2,此时 3要与4交换位置。
  • 【1,4,3,2,2】,3的位置已经放好。
  • 同理temp = num[1] = 4,idx = 3,此时4要与2交换位置。nums = 【1,2,3,4,2】;
  • 发现数组nums前n项已经排好顺序了。
public int findDuplicate2(int[] nums) {
        int temp;
        int t;
        for (int i = 0; i < nums.length;) {
            // 1.1 获取当前元素
            temp = nums[i];
            // 1.2 得到下标
            t = temp - 1;
            // 1.3 如果下标处的元素正好是该元素的位置,则进行下一步判断。否则进行交换
            if (nums[t] == temp) {
                // 1.4 如果下标不等于i则找到重复元素。
                if (t != i){
                    return temp;
                }
                i++;
            } else {
                int j = nums[i];
                nums[i] = nums[t];
                nums[t] = j;
            }
        }
        return 0;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring——AOP面向切面编程—— 一般切面的 AOP 开发

一般切面的 AOP 开发 当我们在使用 Spring AOP 开发时&#xff0c;若没有对切面进行具体定义&#xff0c;Spring AOP 会通过 Advisor 为我们定义一个一般切面(不带切点的切面)&#xff0c;然后对目标对象(Target)中的所有方法连接点进行拦截&#xff0c;并织入增强代码。 工程依…

Pytest----测试脚本上传git代码仓库

【原文链接】Pytest----测试脚本上传git代码仓库 在企业实战中&#xff0c;自动化测试脚本也要放在代码管理平台的&#xff0c;可以选择第三方公共的git代码托管平台&#xff0c;比如github、gitee等&#xff0c;当然也可以在企业内部搭建gitlab作为代码托管平台&#xff0c;他…

蓝桥杯模拟赛习题练习(一)

题目来源&#xff1a;第十四届蓝桥杯模拟赛第一期 注&#xff1a;代码都是自己写的&#xff0c;不是参考答案&#xff01; 1. 二进制位数 问题描述&#xff1a; 十进制整数2在十进制中是1位数&#xff0c;在二进制中对应10 &#xff0c;是2位数。 十进制整数22在十进制中是2位…

Linux系统调用实现简析

1. 前言 限于作者能力水平&#xff0c;本文可能存在的谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 背景 本篇基于 Linux 4.14 ARM 32 glibc-2.31 进行分析。 3. 系统调用的实现 3.1 系统调用的发起 3.1.1 起于用户空间 我们随意挑选一个…

python学习之:妙用魔法函数 __dict___来调用对象中的方法,或者 python文件中的方法

文章目录场景原始写法升级写法面向对象的写法总结场景 原始写法 假设现在有一个文件 tool.py我想在外部输入一个 字符串 就调用这个字符串对应的函数如果你不是用 __dict__ 这个好用的函数&#xff0c;那么你大概率会以下面的方式去写 main 函数&#xff0c;给很多 if但是如果…

网络安全观察报告 态势总览

执行摘要 从 1987 年 9 月 14 日&#xff0c;中国向世界发出第一封电子邮件 到如今&#xff0c;中国的互联网发展已过去整整 31 个年头。从消费互联、产业互联到万物互联&#xff0c;互联网正在加速改变我们的交流方式和交易方式&#xff0c;一次次 004.重塑了国家的经济形态和…

创建型 - 单例模式(Singleton pattern)

单例模式&#xff08;Singleton Pattern&#xff09;&#xff1a;确保一个类有且只有一个实例&#xff0c;并提供一个全局访问点。 文章目录懒汉式-线程不安全饿汉式-线程安全懒汉式-线程安全双重校验锁-线程安全静态内部类实现枚举实现实现方式总结使用场景JDK懒汉式-线程不安…

论文(world、WPS)插入参考文献引用详细教程

一、参考资料 如何在WPS中添加论文参考文献 【Word】怎样给论文添加引用参考文献 word添加各种引用 二、相关介绍 1. 参考文献的标注 参考文献的标注分为全部引用、局部引用、间接引用。 1.1 全部引用&#xff08;直接引用&#xff09; 需要双引号&#xff0c;无论冒号…

[附源码]Python计算机毕业设计SSM基于的社区疫情管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

ADI Blackfin DSP处理器-BF533的开发详解24:触摸屏的实现和应用(含源代码)

硬件准备** ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 使用到硬件模块原理图 功能介绍 四线电阻式触摸屏&#xff0c;拿笔和指甲划拉的&#xff0c;不是现在的容性触摸屏。 ADSP-EDU-BF53x 板卡的 …

《Docker》阿里云服务器docker部署nginx并配置https踩坑记录(完整)

前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e; 主页: oliver尹的主页 格言: 跌倒了爬起来就好&#xff5e; 来个关注吧&#xff0c;点个赞…

# Docker说明、安装(Windows10家庭版)

Docker说明、安装&#xff08;Windows10家庭版&#xff09; Docker是什么&#xff1f;它是干嘛的&#xff1f; 开始&#xff0c;我就知道别人说是用来加工tar包的。tar包&#xff1f;又是干什么用的&#xff1f; tar包&#xff0c;个人粗俗的理解就是一个环境&#xff0c;里面…

CVPR2021 | VQGAN+:Taming Transformers for High-Resolution Image Synthesis

原文标题&#xff1a;Taming Transformers for High-Resolution Image Synthesis 主页&#xff1a;Taming Transformers for High-Resolution Image Synthesis 代码&#xff1a;https://github.com/CompVis/taming-transformers transformer比CNN缺少了归纳偏置和局部性&…

音视频编解码经典问题汇总(1)

前言&#xff1a; 大家好&#xff0c;今天给大家分享的内容是关于平时在做音频编解码会遇到的一些问题&#xff0c;比如说&#xff1a;解码播放的时候&#xff0c;播不出来解码播放的时候&#xff0c;画面有条纹编码的时候&#xff0c;修改分辨率大小&#xff0c;没有反应这三个…

【NumPy 数组副本 vs 视图、NumPy 数组形状、重塑、迭代】

&#x1f935;‍♂️ 个人主页老虎也淘气 个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f44d;&#x1f3fb; 收藏…

实验五 进程通信-管道通信

1. 函数int pipe(int fd[2])创建一个管道&#xff0c;管道两端可分别用描述字fd[0]以及fd[1]来描述。需要注意的是&#xff0c;管道的两端是固定了任务的。即一端只能用于读&#xff0c;由描述字fd[0]表示&#xff0c;称其为管道读端&#xff1b;另一端则只能用于写&#xff0c…

我失业了?| ChatGPT生信分析初体验

最近ChatGPT火的一塌糊涂&#xff0c;作为在生物医学和计算机科学领域夹缝求生的边缘摇摆人&#xff0c;也来蹭一波热度。ChatGPT是一个预训练的语言模型&#xff0c;由OpenAI训练。它可以用来生成自然语言文本&#xff0c;并且可以进行对话。它基于Transformer架构&#xff0c…

OAuth2.0的四种授权方式

前言 OAuth 简单理解就是一种授权机制&#xff0c;它是在客户端和资源所有者之间的授权层&#xff0c;用来分离两种不同的角色。在资源所有者同意并向客户端颁发令牌后&#xff0c;客户端携带令牌可以访问资源所有者的资源。 OAuth2.0 是 OAuth 协议的一个版本&#xff0c;有…

【计算机毕业设计】77.旅游资源网站源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 本论文主要论述了如何使用JAVA语言开发一个旅游资源网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xf…

MATLB|分布式能源的选址与定容IEEE30节点实现

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清…