【LeetCode】剑指 Offer <二刷>(1)

news2024/11/24 19:55:24

目录

前言:

题目:剑指 Offer 03. 数组中重复的数字 - 力扣(LeetCode)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


前言:

刚学 golang 半个多月,看了一堆的文档啊,框架啊,许许多多的东西,学到了很多,但是代码没有怎么上手写,所以我就决定用 golang 二刷剑指 Offer,增强我 golang 的代码能力。

题目:剑指 Offer 03. 数组中重复的数字 - 力扣(LeetCode)

题目的接口:

func findRepeatNumber(nums []int) int {

}

解题思路:

这道题目一上来我就能想到两个比较常见的解法,首先是暴力解法,就是从第一元素开始遍历,直到遍历到另一个一样的元素就停下,这种解法是 O(N^2),复杂度非常的差,就不考虑了;

第二种方法是用哈希表,把数据依次放进哈希表中,等再次遇到同样的元素就找到了,这个的复杂度是 O(N),但是这种方法会有额外的空间开销,我就直接实现一下:

func findRepeatNumber(nums []int) int {
    hash := make([]int, len(nums))
    for _, n := range nums {
        if hash[n] == 1 {
            return n
        } else {
            hash[n] = 1
        }
    }
    return -1
}

虽然是二刷剑指 Offer,但是我还是忘了最优解,看了眼别的大佬的解答,第三种方式是基于题目要求的解法,题目限定了数组中的值是 0  ~ n - 1,具体思路就是:遍历数组,将数组的值作为索引,把该索引位置的值改成负数,如果我们遍历到负数,就先获取他变负数前的值,在根据这个值作为索引,如果索引位置是负数,证明这个值重复出现。

如果看一遍看不懂没关系,对着代码画个图模拟一下就很清晰了,以题目的示例为例:

示例 1:

输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3 

遍历数组,第一个值是 2,他的索引位置是 1 >= 0,我们通过先取相反数再减一的方式将索引 2 位置的值变成负数,执行完数组的第一个值后:[ 2, 3, -2, 0, 2, 5, 3 ]

第二个值是 3,他的索引位置是 0 >= 0,同样的做法:[ 2, 3, -2, -1, 2, 5, 3 ]

第三个值是 1,他的索引位置是 3 >= 0,同样的做法:[ 2, -4, -2, -1, 2, 5, 3 ]

第四个值是 0,他的索引位置是 2 >= 0,同样的做法:[ -3, -4, -2, -1, 2, 5, 3 ]

第五个值是 2,他的索引位置是 -2 < 0,是负数,我们就得出值了。

这里补充一点,如果我们取到的值就是负数该怎么办?加一再取相反数就能获得他原本的索引值

代码:

func findRepeatNumber(nums []int) int {
    for _, n := range nums {
        if n < 0 { // 获取原本的索引值
            n = -(n + 1)
        }
        
        if nums[n] < 0 { // 如果是负数证明找到了
            return n
        } else { // 将该位置设置成负数
            nums[n] = -nums[n] - 1
        }
    }
    return -1
}

过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

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

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

相关文章

Charles调试请求

问题 需要调试特定的一个请求。 解决 选中调试 选中一个请求&#xff0c;右键菜单选中调试即可。 启用调试模式 勾选顶部控制按钮&#xff0c;启用调试模式&#xff0c;右下角会出现调试启用状态。 调试请求管理 通过顶部proxy➡️Breakpoint Settings…菜单&#xf…

企业诊断屋:在线小说企业如何用A/B测试赋能业务

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近两年来&#xff0c;在线小说领域业务发展“降速”&#xff0c;相较于几年前的快速扩张&#xff0c;2022年后国内在线小说企业步入瓶颈期。但与此同&#xff0c;新…

云端地球 | 在线云端建模,让建筑设计更高效

三维模型制作是建筑设计的重要环节&#xff0c;但人工建模需要耗费大量的时间和精力。随着计算机视觉和倾斜摄影测量技术的发展&#xff0c;实景三维模型的应用日益广泛&#xff0c;利用三维重建技术实现可视化、数字化和信息化转变&#xff0c;已逐渐成为建筑行业的共识。 陕西…

【二等奖方案】大规模金融图数据中异常风险行为模式挖掘赛题「Aries」解题思路

第十届CCF大数据与计算智能大赛&#xff08;2022 CCF BDCI&#xff09;已圆满结束&#xff0c;大赛官方竞赛平台DataFountain&#xff08;简称DF平台&#xff09;正在陆续释出各赛题获奖队伍的方案思路&#xff0c;欢迎广大数据科学家交流讨论。 本方案为【大规模金融图数据中…

学生管理系统VueAjax版本

学生管理系统VueAjax版本 使用Vue和Ajax对原有学生管理系统进行优化 1.准备工作 创建AjaxResult类&#xff0c;对Ajax回传的信息封装在对象中 package com.grg.Result;/*** Author Grg* Date 2023/8/30 8:51* PackageName:com.grg.Result* ClassName: AjaxResult* Descript…

打造完美直播:深入解析人脸美颜SDK的算法与特性

在如今数字化的时代&#xff0c;直播已经成为了人们与世界互动的重要方式之一。而在众多直播平台中&#xff0c;吸引观众并提供高质量的视觉体验成为了至关重要的任务。其中&#xff0c;人脸美颜技术的应用对于提升直播质量和观众体验起到了不可忽视的作用。本文将深入解析人脸…

正中优配:h股是什么意思

跟着我国世界化程度的日益进步&#xff0c;越来越多的人开端瞩目“H股”&#xff0c;它到底是什么意思呢&#xff1f; H股&#xff08;H share&#xff09;是指在香港上市的我国企业股票&#xff0c;它是我国企业参与世界本钱商场的一种方法。在1990年代初期&#xff0c;我国为…

在CSDN的第128天:写博客是我对抗焦虑的工具

目录 机缘 收获 日常 成就 憧憬 致各位 机缘 机缘&#xff0c;我在CSDN应该有两个比较大的机缘 第一个机缘是在大一上的时候&#xff0c;加入了实验室的朋友们都在写博客&#xff0c;而我因为没加入实验室&#xff0c;一度非常焦虑。当时我很害怕&#xff0c;我害怕我自己…

月薪16K,从房地产转行5G网络优化工程师,他说:等风来,不如追风去!

杨绛先生曾说&#xff1a;“无论你上到人生的哪一层台阶&#xff0c;阶下有人仰望你&#xff0c;阶上有人俯视你&#xff0c;抬头自卑&#xff0c;低头自得&#xff1b;唯有平视&#xff0c;才能看见最真实的自己。” 李同学&#xff0c;湖北的某四线小城市&#xff0c;29岁&am…

【HSPCIE仿真】输入网表文件(5)基本仿真输出

仿真输出 1. 概述1.1 输出变量1.2 输出分析类型 2. 显示仿真结果2.1 .print语句基本语法示例 2.2 .probe 语句基本语法示例 2.3 子电路的输出2.4 打印控制选项.option probe.option post.option list.option ingold 2.5 .model_info打印模型参数 3. 仿真输出参数的选择3.1 直流…

如何跟进好客户,维护客户?

万事开头难&#xff0c;获取了客户资源后&#xff0c;必须进行有效的跟进和维护才有机会获得赢单。 客户跟进维护过程中的主要困境 基于以上困境&#xff0c;我向公司销售大佬取经&#xff0c;总结了以下几个适合销售小白的销售方法论&#xff1a; 本文所用工具&#xff1a;ht…

哈佛商学院教授:每个老板使用ChatGPT之类AI工具的理由

哈佛商学院教授Karim Lakhani表示&#xff0c;每个老板都应该使用生成式人工智能工具&#xff0c;生成式AI为老板提供了一种更高效的工作方式&#xff0c;在提高生产力、提高规模、与客户沟通以及促进销售、社交媒体内容更新和新产品开发等方面都有积极意义。 Karim Lakhani表…

分享一个影像切瓦片工具

当我们手上有很多无人机拍摄的影像&#xff0c;想切片后发布到内网可以用什么工具切片&#xff1f;亦或是自己制作的地图有没有什么工具可以切片后进行发布&#xff1f;想要解决这些问题&#xff0c;你可以好好看看这篇文章&#xff0c;本文将为你提供一种简单的切片方法&#…

信息安全——数字签名

一、数字签名背景 假定A发送一条包含认证码的消息给B&#xff0c;他们之间仍然可能存在争议&#xff0c;例如A可以否认发过该消息&#xff0c;B无法证明A确实发了该消息。另外B也可以伪造一个不同的消息&#xff0c;但声称是从A收到的。也就是说&#xff0c;虽然保证了信息的完…

WordPress(3)会员插件安装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、服务器中上传插件二、使用步骤1.启动插件前言 提示:会员插件的安装不能在网站后台插件中心中直接安装原因我还没有排查 原因:会导致网站停止运行 一、服务器中上传插件 二、使用步骤 …

java遇到java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver该如何解决

普通的Java项目&#xff0c;利用servlet实现登录页面跳转出现下列问题。该如何解决&#xff1f;&#xff1f;&#xff1f; 首先你要先加载驱动&#xff0c;idea通过项目结构添加的依赖包是无法正常加载驱动的。我们要在 WEB-INF目录下建立lib目录在lib目录下添加MySQL驱动。

如何利用人工智能实现软件测试的左移

在本文中&#xff0c;我们&#xff08;作者&#xff09;探讨了如何利用人工智能的力量&#xff0c;在软件测试领域实现左移。 用AI驱动的创新变革测试领域 测试在确保应用程序质量和可靠性方面发挥着至关重要的作用。然而&#xff0c;随着测试要求变得越来越复杂&#xff0c;人…

Linux 环境中通过 Docker 部署 Nacos 2.2.3 服务发现与配置中心

目录 环境准备Nacos 数据库创建Docker 部署 Nacos1. 创建挂载目录2. 下载镜像3. 创建和启动容器4. 访问控制台 导入 Nacos 配置SpringBoot 整合 Nacospom 依赖application.yml 配置 参考官方链接微服务商城源码 环境准备 名称版本IP端口Nacos2.2.3192.168.10.218848、9848MySQ…

大中型WMS仓储管理系统选型推荐,实现货品出入库精细化管理-亿发

智能制造是基于信息技术&#xff0c;通过将生产设备、工作流程、供应链等各个环节进行智能化互联&#xff0c;实现生产过程的优化和智能化管理的模式。它涵盖了数字化、网络化、智能化等多方面的科技&#xff0c;旨在增强生产效率、灵活度和质量。 WMS&#xff0c;即仓储管理系…

基于JAVA SpringBoot互联网就医门诊挂号管理系统

摘要 随着时代的发展,无线互联网技术的应用和普及给人们的生活带来了极大的改变,现在信息技术不仅可以提高我们的工作效率,还能有效的规避一些错误风险,节约人力成本。我国国民一方面对健康的要求越来越重视了&#xff0c;另一方面现代人的健康问题日益严重&#xff0c;所以医院…