算法
locky1218
Qt爱好者
展开
-
【算法】一道有趣的GOOGLE面试题
最近在微博上看到一道有趣的GOOGLE面试题,见下图: 文字版: 一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间。 这个题目要求用O(n)的时间复杂度,这意味着只能遍历数组一次。同时还要寻找重复元素,很容易想到建立哈希表来完成,遍历数组时将每个元素映射到哈希表中,如转载 2014-10-06 19:39:52 · 529 阅读 · 0 评论 -
【算法】一道有趣的GOOGLE面试题 --【解法2】
int Repeat(int *a, int n) { for(int i = 0; i < n; i++) { if(a[i] > 0) //判断条件 { if(a[ a[i] ] < 0) { return a[i];//已经被标上负值了,有重复 } else { a[ a[i] ]= -a[a[i]]; //记为负 }转载 2014-10-06 19:51:09 · 578 阅读 · 0 评论 -
【算法】数组中只出现1次的两个数字(百度面试题)
首先来看题目要求: 在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字。 考虑下这个题目的简化版——数组中除一个数字只出现1次外,其它数字都成对出现,要求尽快找出这个数字。这个题目根据异或运算的特点,直接异或一次就可以找出这个数字。 现在数组中有两个数字只出现1次,直接异或一次只能得到这两个数字的异或结果,但光从这个结果肯定无法得到转载 2014-10-06 19:55:24 · 626 阅读 · 0 评论