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

目录

前言:

题目:剑指 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.rhkb.cn/news/118440.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【办公自动化】使用Python批量处理Excel文件并转为csv文件

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

Linux知识点 -- Linux多线程(四)

Linux知识点 – Linux多线程&#xff08;四&#xff09; 文章目录 Linux知识点 -- Linux多线程&#xff08;四&#xff09;一、线程池1.概念2.实现3.单例模式的线程池 二、STL、智能指针和线程安全1.STL的容器是否是线程安全的2.智能指针是否是线程安全的 三、其他常见的各种锁…

微服务dubbo和nexus

微服务是一种软件开发架构风格&#xff0c;它将一个应用程序拆分成一组小型、独立的服务&#xff0c;每个服务都可以独立部署、管理和扩展。每个服务都可以通过轻量级的通信机制&#xff08;通常是 HTTP/REST 或消息队列&#xff09;相互通信。微服务架构追求高内聚、低耦合&am…

vue声明周期

1.在created中发送数据 async created(){ const resawait axios.get("url) this.listres.data.data } 2.在mounted中获取焦点 mounted(){ document.querySelector(#inp).focus()

视频图像处理算法opencv在esp32及esp32s3上面的移植,也可以移植openmv

opencv在esp32及esp32s3上面的移植 Opencv简介 OpenCV是一个基于Apache2.0许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上&#xff0c;它轻量级而且高效——由一系列 C 函数和少量…

vmware虚拟机(ubuntu)远程开发golang、python环境安装

目录 1. 下载vmware2. 下载ubuntu镜像3. 安装4. 做一些设置4.1 分辨率设置4.2 语言下载4.3 输入法设置4.4 时区设置 5. 直接切换管理员权限6. 网络6.1 看ip6.2 ssh 7. 本地编译器连接远程服务器7.1 创建远程部署的配置7.2 文件同步7.3 远程启动项目 8. ubuntu安装golang环境8.1…

TDesign表单rules通过函数 实现复杂逻辑验证输入内容

Element ui 中 我们可以通过validator 绑定函数来验证一些不在表单model中的值 又或者处理一下比较复杂的判断逻辑 TDesign也有validator 但比较直观的说 没有Element那么好用 这里 我们给validator绑定了我们自己的checkAge函数 这个函数中 只有一个参数 value 而且 如果你的…

Java-Optional类

概述 Optional是JAVA 8引入的一个类&#xff0c;用于处理可能为null的值。 利用Optional可以减少代码中if-else的判断逻辑&#xff0c;增加代码的可读性。且可以减少空指针异常的发生&#xff0c;增加代码的安全性。 常用的方法 示例 代码 public class OptionalTest {pub…

前端基础(Element、vxe-table组件库的使用)

前言&#xff1a;在前端项目中&#xff0c;实际上&#xff0c;会用到组件库里的很多组件&#xff0c;本博客主要介绍Element、vxe-table这两个组件如何使用。 目录 Element 引入element 使用组件的步骤 使用对话框的示例代码 效果展示 vxe-table 引入vxe-table 成果展…

【力扣】62. 不同路径 <动态规划>

【力扣】62. 不同路径 一个机器人位于一个 m m m x n n n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。问总共有多少条…

详解 SpringMVC 的 @RequestMapping 注解

文章目录 1、RequestMapping注解的功能2、RequestMapping注解的位置3、RequestMapping注解的value属性4、RequestMapping注解的method属性5、RequestMapping注解的params属性&#xff08;了解&#xff09;6、RequestMapping注解的headers属性&#xff08;了解&#xff09;7、Sp…

2023谷歌开发者大会直播大纲「终稿」

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

无涯教程-JavaScript - CUBEMEMBERPROPERTY函数

描述 CUBEMEMBERPROPERTY函数从多维数据集返回成员属性的值。使用此函数可以验证多维数据集中是否存在成员名称,并返回该成员的指定属性。 语法 CUBEMEMBERPROPERTY (connection, member_expression, property)争论 Argument描述Required/OptionalconnectionName of the co…

ORB-SLAM3复现过程中遇到的问题及解决办法

在复现过程中遇到的问题的解决过程 1. 版本检查1.1 Opencv版本的检测1.2 Eigen版本的检测1.3 查看Python版本1.4 其他 2. 编译过程中遇到的问题及解决办法2.1 ./build.sh遇到的问题2.2 ./build_ros.sh遇到的问题 因为环境比较干净&#xff0c;所以遇到的问题相对少一些&#xf…

【LeetCode】409. 最长回文串

409. 最长回文串&#xff08;简单&#xff09; 方法&#xff1a;哈希表 贪心 思路 不难发现&#xff0c;回文字符串一定是由 若干偶数个字符 至多一个奇数个字符 组成 。我们可以使用一个长度为 128 的 hash表来记录每一个字符的出现次数&#xff0c;当该字符出现了两次&am…

【learnopengl】Assimp构建与编译

文章目录 【learnopengl】Assimp构建与编译1 前言2 Assimp构建与编译2.1 下载源码2.2 CMake构建2.3 VS2022编译 3 在VS中配置Assimp库4 验证 【learnopengl】Assimp构建与编译 1 前言 最近在跟着LearnOpenGL这个网站学习OpenGL&#xff0c;这篇文章详细记录一下教程中关于Ass…

Navicat介绍及下载安装教程

Navicat是一个广泛使用的数据库管理工具&#xff0c;可用于管理多种数据库系统&#xff0c;如MySQL、MariaDB、Oracle等。它提供了丰富的功能&#xff0c;使得管理数据库变得更加容易和高效。安装Navicat十分简单&#xff0c;只需下载安装包并按照向导进行操作即可。在安装完成…

RealVNC配置自定义分辨率(AlmaLinux 8)

RealVNC 配置自定义分辨率&#xff08;AlmaLinux8&#xff09; 参考RealVNC官网 how to set up resolution https://help.realvnc.com/hc/en-us/articles/360016058212-How-do-I-adjust-the-screen-resolution-of-a-virtual-desktop-under-Linux-#standard-dummy-driver-0-2 …

【ROS 04】ROS运行管理

ROS是多进程(节点)的分布式框架&#xff0c;一个完整的ROS系统实现&#xff1a; 可能包含多台主机&#xff1b; 每台主机上又有多个工作空间(workspace)&#xff1b; 每个的工作空间中又包含多个功能包(package)&#xff1b; 每个功能包又包含多个节点(Node)&#xff0c;不同的…

UE4/5在蓝图细节面板中添加函数按钮(蓝图与c++的方法)

目录 在细节面板中添加按钮使用函数 蓝图的方法 事件 函数 效果 uec的方法 效果 在细节面板中添加按钮使用函数 很多时候&#xff0c;我们可以看到一些插件的actor类中&#xff0c;点击一下之后就可以实现如矩阵一样的效果。 实际上是因为其使用了函数来修改了蓝图中的数…