今日头条实习面试总结(2)
来源:互联网 发布:石家庄seo周少鹏新浪 编辑:程序博客网 时间:2024/05/24 01:51
题目:
在一个长度为n的数组里的所有数字都在0到n-1的范围内。
数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。
请找出数组中任意一个重复的数字。
方法1:暴力嵌套两次循环,时间复杂度O(n^2),空间复杂度O(1)
bool weatherRepeat(vector<int> num){ for(int i = 0; i < num.size(); ++i){ for(int j = i + 1; j < num.size(); ++j){ if(num[i] == num[j]){return true;}} } return false;}
方法2:标记法,对出现过的数字使用一种数据结构存放其出现过的次数,如果超过一次返回true
时间复杂度O(n),空间复杂度O(n),可以使用map,也可以使用set,也可以用数组。关于map和set将在下一篇中具体来研究。这里使用一个vector<int> 来实现。
bool weatherRepeat(vector<int> num){vector<int> a(num.size(), 0);for(int i = 0; i < num.size(); ++i){a[num[i]]++;if(a[num[i]] == 2){return true;}}return false;}
方法3:因为所有的数字都是在0 - n-1的范围内,所以在将数组排序之后,如果不存在重复的数字,则是按照0 - n-1依次递增的,所以利用这个特性,循环一次,如果num[i]与num[num[i]]的值相等,则返回true,不等则将num[i] 与 num[num[i]]的值进行交换。此方法的时间复杂度为O(n),空间复杂度为O(1)。
bool weatherRepeat(vector<int>& num){for(int i = 0; i < num.size(); ++i){if(num[i] != i){int temp = num[i];if(num[i] == num[temp]){return true;}else{int tp = num[i];num[i] = num[temp];num[temp] = tp;}}}return false;}
在leetcode上有一道类似的题目
Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.
Find all the elements of [1, n] inclusive that do not appear in this array.
Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space.
Example:
Input:[4,3,2,7,8,2,3,1]Output:[5,6]
class Solution {public: vector<int> findDisappearedNumbers(vector<int>& nums) { vector<int> a; for(int i = 0; i < nums.size(); ++i){ int m = abs(nums[i]) - 1; nums[m] = nums[m] > 0 ? -nums[m] : nums[m]; } for(int i = 0; i < nums.size(); ++i){ if(nums[i] > 0){ a.push_back(i + 1); } } return a; }};用这个思路,也可以解答上面那个题,只不过时间复杂度更多点。O(2N)
- 今日头条实习面试总结(2)
- 今日头条实习面试总结(1)
- 今日头条C++后台开发实习面试总结
- 12.20今日头条实习面试总结-算法工程师
- 今日头条前端面试总结
- 今日头条前端面试总结
- 面试-今日头条
- 今日头条面试
- 今日头条面试
- 今日头条面试(android)
- 今日头条面试相关
- 今日头条实习生面试
- 今日头条面试总结——instanceof原理
- [笔试练习]今日头条实习笔试
- 2017今日头条实习测试
- ACM--面试--回文解码--今日头条2017实习offer题目
- 今日头条2
- 今日头条2017实习生面试(三轮)
- 山东省高校组队训练邀请赛——AC题目(4AC:3水题,1扩展欧几里得)
- 水题笔记:noip2013 货车运输 [LCA]
- 三、servlet的简单创建
- 310. Minimum Height Trees
- uva 1328 Period(KMP循环节)
- 今日头条实习面试总结(2)
- 加入ospf area0 抓包图
- 用servlet在网页生成验证码并验证
- C++重载、重写、重定义区别
- Spring 发送ajax中文乱码
- Sails+MVC+Mysql+Node+学习笔记一
- C++primer[习题][第二章][21-30]
- hdu 5969 最大的位或(贪心)
- CentOS服务器配置之uwsgi的安装和使用(翻译文档)