题目描述
知识点
数组,哈希表
结果
实现
码前思考
- 我的第一感觉就是 O ( N ) O(N) O(N)的遍历数组+hash table ,事实证明我还是想的太简单了,面试的时候不可能就这么简单地问,还要综合考虑时间复杂度和空间复杂度的!
代码实现
-
哈希表版本:
//应该是考察hash table的使用 //数组大小可以放下 class Solution { public: int findRepeatNumber(vector<int>& nums) { int len = nums.size(); vector<bool> table(len,false); for(int i=0;i<len;i++){ if(table[nums[i]] == true){ return nums[i]; }else{ table[nums[i]] = true; } } return -1; } };
-
原地交换
class Solution { public: int findRepeatNumber(vector<int>& nums) { int i = 0; int len = nums.size(); while(i < len){ if(nums[i] == i){ i++; }else if(nums[nums[i]] == nums[i]){ return nums[i]; }else{ swap(nums[i],nums[nums[i]]); } } return -1; } };
码后反思
- 现在是重启LeetCode的刷题之旅了,对于这一阶段的我,应该是基础的【编程语言语法】,【数据结构】和【算法】已经掌握了,需要做的就是不断地刷题保持手感!不能让2020年2/3年的努力白费;
- 这个阶段的刷题不再是拘泥于将题目解答出来了,而是要学会一题多解,一题巧解,多参考别人的思路,毕竟现在越来越卷了,面试官会问你时间复杂度和空间复杂度的;
- 哈希表方法
- 时间复杂度: O ( N ) O(N) O(N)
- 空间复杂度: O ( N ) O(N) O(N)
- 原地交换
- 时间复杂度: O ( N ) O(N) O(N)
- 空间复杂度: O ( 1 ) O(1) O(1)