小知识,大挑战!本文正在参与「程序员必备小知识」创作活动
本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
点赞再看,养成习惯。微信搜索【一条coding】关注这个在互联网摸爬滚打的程序员。
本文收录于github-技术专家修炼,里面有我的学习路线、系列文章、面试题库、自学资料、电子书等。
这道题在原书上绝对不是简单级别啊! 它考察的是程序员的沟通能力,先问面试官要时间/空间需求!!! 只是时间优先就用字典, 还有空间要求,就用指针+原地排序数组, 如果面试官要求空间O(1)并且不能修改原数组,还得写成二分法!!!
——leetcode此题热评
前言
哈喽,大家好,我是一条。
糊涂算法,难得糊涂
今天做一道剑指offer的题。
Question
剑指 Offer 03. 数组中重复的数字
难度:简单
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3限制:
2 <= n <= 100000
Solution
做了这么多题,这题应该算是比较简单了
但是又不简单,就像评论说的,我们面试的时候,一定要问好时间和空间的要求
- 新建一个
hashset - 依次加入数组元素,加入失败,就将该数字返回,并终止循环。
Code
所有
leetcode代码已同步至github欢迎
star
/**
* @author yitiaoIT
*/
class Solution {
public int findRepeatNumber(int[] nums) {
Set<Integer> set = new HashSet<>();
for(int n : nums) {
if(!set.add(n)){
return n;
}
}
return -1;
}
}
Result
复杂度分析
- 时间复杂度:O(N)
Last
独脚难行,孤掌难鸣,一个人的力量终究是有限的,一个人的旅途也注定是孤独的。当你定好计划,怀着满腔热血准备出发的时候,一定要找个伙伴,和唐僧西天取经一样,师徒四人团结一心才能通过九九八十一难。 所以,
如果你也想进大厂,
想学好数据结构和算法,
想坚持刷题,
想有一群志同道合的伙伴,
请加入组队刷题