前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指 Offer 03. 数组中重复的数字

剑指 Offer 03. 数组中重复的数字

作者头像
SakuraTears
发布2022-01-13 15:11:19
2070
发布2022-01-13 15:11:19
举报

题目

0.png
0.png

思路

1.sort后遍历找到一样的返回。时间复杂O(nlogn)。

2.用哈希表遍历如果这个数字为key的value为0则+1,不为0直接return。时间复杂度O(n),空间复杂度O(n)。

3.时间复杂度O(n),空间复杂度为O(1)的方法:

题目写出数组范围为0~n-1,所以当数组排序之后i的位置的数字应该为i,由于数组中有重复的数字,所以有的位置没有数字,有的位置有多个数字。

从头到尾重新遍历这个数组,当nums[i] != i时,比较nums[nums[i]]位置的值,如果相同则直接return,不同则把两个数交换位置,重复以上过程直到nums[i] == i,或者return。

代码语言:javascript
复制
func findRepeatNumber(nums []int) int {
    n := len(nums)
    for i := 0; i < n; i++ {
        if i != nums[i] {
            if nums[i] == nums[nums[i]] {
                return nums[i]
            } else {
                nums[i], nums[nums[i]] = nums[nums[i]], nums[i]
                i--
            }
        }
    }
    return -1
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年01月04日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 思路
    • 3.时间复杂度O(n),空间复杂度为O(1)的方法:
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档