找出数组中的重复数字

面试题简述

给你一个长度为 n 的数组,每个元素的值都在 1 到 n-1 之间,至少有一个数字重复。要求空间复杂度为 O(1),返回重复的数字以及它出现的次数,你怎么做?

面试官想听的

是否知道 O(1) 解决找重复数字的解法。

面试示例回答

这个题我会先从暴力和哈希思路讲起,再优化。

暴力是 O(n^2),哈希是 O(n) 空间。但是由于题目要求 O(1) 的空间,因此要用指针思维。

详细内容可跳转该链接查看详情:http://xhslink.com/o/9YdrAnTRNgn

由浅入深分析

1、环检测思想:利用数组值作指针。

2、数学保证:由于1~n-1的映射必有重复,因此必有环。

3、时间复杂度:O(n),空间复杂度:O(1)。

面试加分点

1、提出 Floyd 算法并能解释为什么可行。

2、强调空间 O(1) 是关键。

3、能把抽象问题转化为链表结构。

#春招##实习##面经##面试#
2025智力题复盘 文章被收录于专栏

带你复盘2025大厂智力题面试,拆解面试官到底想听啥

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-25 09:53
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务