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

这篇具有很好参考价值的文章主要介绍了【LeetCode】剑指 Offer <二刷>(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言:

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

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


前言:

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

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

【LeetCode】剑指 Offer <二刷>(1),38 天二刷剑指 Offer,golang,算法

题目的接口:

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
}

过啦!!!

【LeetCode】剑指 Offer <二刷>(1),38 天二刷剑指 Offer,golang,算法

写在最后:

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

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

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~文章来源地址https://www.toymoban.com/news/detail-696711.html

到了这里,关于【LeetCode】剑指 Offer <二刷>(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    目录 题目:剑指 Offer 06. 从尾到头打印链表 - 力扣(LeetCode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 07. 重建二叉树 - 力扣(LeetCode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 这道题我读完之后想到了两种思路,1、直接从后往前去链表

    2024年02月10日
    浏览(46)
  • (搜索) 剑指 Offer 38. 字符串的排列 ——【Leetcode每日一题】

    难度:中等 输入一个字符串,打印出该字符串中字符的所有排列。 你可以以任意顺序返回这个字符串数组,但里面 不能有重复元素 。 示例: 输入:s = “abc” 输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”] 限制 : 1 = s 的长度 = 8 💡思路:回溯 可以直接 暴力穷举 ,但

    2024年02月12日
    浏览(39)
  • 【leetcode刷题之路】剑指Offer(3)——搜索与回溯算法

    7 搜索与回溯算法 7.1 【BFS】剑指 Offer 32 - I - 从上到下打印二叉树 https://leetcode.cn/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/   这里借助队列来实现广度优先遍历,由于需要访问每一层的节点,而且这一层访问才可以访问下一层,所以可以考虑队列的先进先出,先把每一层的节

    2024年02月13日
    浏览(43)
  • 【leetcode刷题之路】剑指Offer(4)——分治+排序算法+动态规划

    8 分治算法 8.1 【递归】剑指 Offer 07 - 重建二叉树 https://leetcode.cn/problems/zhong-jian-er-cha-shu-lcof/   前序遍历是根左右,中序遍历是左根右,这也就意味着前序遍历的第一个节点是整棵树的根节点,顺着这个节点找到它在中序遍历中的位置,即为in_root,那么in_root左边的都在左子

    2024年02月11日
    浏览(43)
  • 【算法】双指针——leetcode盛最多水的容器、剑指Offer57和为s的两个数字

    盛水最多的容器 (1)暴力解法   算法思路:我们枚举出所有的容器大小,取最大值即可。   容器容积的计算方式:   设两指针 i , j ,分别指向水槽板的最左端以及最右端,此时容器的宽度为 j - i 。由于容器的高度由两板中的较短的板决定,因此可得容积公式 :

    2024年02月13日
    浏览(36)
  • 二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”

    各位CSDN的uu们你们好呀,今天继续数据结构与算法专栏中的二叉树,下面,让我们进入二叉树的世界吧!!! 二叉树(上)——“数据结构与算法”_认真学习的小雅兰.的博客-CSDN博客 二叉树链式结构的实现 二叉树链式结构的实现 求二叉树的高度 但是这种写法有很大的问题

    2024年02月17日
    浏览(29)
  • 【LeetCode】剑指 Offer(25)

    目录 题目:剑指 Offer 49. 丑数 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 丑数这道题用到一点动态规划的思想, 具体思路如下: 根据题意: 如果说第一个丑数是一,包含质因子 2、3 和 5 的数称作丑数, 那么我们发现,之后的丑数: 都是前

    2023年04月09日
    浏览(39)
  • 【LeetCode】剑指 Offer(28)

    目录 题目:剑指 Offer 54. 二叉搜索树的第k大节点 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 55 - I. 二叉树的深度 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 55 - II. 平衡二叉树 - 力扣(Leetcode) 题目的接

    2023年04月24日
    浏览(39)
  • 【LeetCode】剑指 Offer(21)

    目录 题目:剑指 Offer 39. 数组中出现次数超过一半的数字 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 40. 最小的k个数 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 这道题,我的思路是直接排序, 然后返回中间

    2023年04月10日
    浏览(30)
  • 【LeetCode】剑指 Offer(26)

    目录 题目:剑指 Offer 51. 数组中的逆序对 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 这一道题,我的思路是用双指针暴力求解, 但这个数组长度,O(N^2)的时间复杂度肯定是不可能把所有样例跑完, 看了大佬的思路,用的是归并排序,(如果不

    2023年04月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包