一道google面试题】的更多相关文章

题目描述: 一个大小为n的数组,里面的数都属于范围[0,n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间. 算法分析: 这个题目要求用O(n)的时间复杂度,这意味着只能遍历数组一次.同时还要寻找重复元素,很容易想到建立哈希表来完成,遍历数组时将每个元素映射到哈希表中,如果哈希表中已经存在这个元素则说明这就是个重复元素.因此直接使用C++ STL中的hash_set,可以方便的在O(n)时间内完成对重复元素的查找. 但是题目却在空间复杂度上有限制——要求为O(1)…
输入n,把1-n分成两个和相等的子集,有多少种分法 想了个dp,直接背包也行 #include <iostream> #include <cstdio> using namespace std; ]; int main() { int n; scanf("%d", &n); ) / ; ) { puts("); ; } s >>= ; dp[] = ; ; j <= n; j++) for(int i = s; i >=…
输入n,把1-n分成两个和相等的子集,有多少种分法 想了个dp,直接背包也行 #include <iostream> #include <cstdio> using namespace std; ]; int main() { int n; scanf("%d", &n); ) / ; ) {//如果s为奇数,则不可能分成相等的两份 puts("); ; } s >>= ; dp[] = ;//表示s等于0的时候,方法数为1 ; j…
一道Google面试题,题目如下:"有一个100层高的大厦,你手中有两个相同的玻璃围棋子.从这个大厦的某一层扔下围棋子就会碎,用你手中的这两个玻璃围棋子,找出一个最优的策略,来得知那个临界层面." 版本一: 为了得到两个棋子的最优策略,我们先简化问题,看看一个棋子的情况.如果手中只有一个棋子,为了得知临界层面,你只有一种选择:从2楼开始,一层一层地试,直到棋子被打碎,此时你站的楼层就是所求的临界层面.在最差的情况下,我们需要投掷99-2+1=98次,你可能奇怪为什么不是100-2+1=…
问题描写叙述: 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.比如输入12,从1到12这些整数中包括1 的数字有1.10.11和12.1一共出现了5次. 这是一道广为流传的google面试题. 算法: 第一种思路:对从1到n的每一个数进行统计,统计的结果相加.算法复杂度为O(n) 另外一种思路:举例说明. 令n=321.则: 它的个位上出现1的形式为XY1,次数和为33(由于十位百位上可能出现的组合为0-32) 它的十位上出现1的次数和较为复杂,形式为X1Y,X的取值范围为0-…
http://ac.jobdu.com/problem.php?pid=1534 题目1534:数组中第K小的数字 时间限制:2 秒 内存限制:128 兆 特殊判题:否 提交:1120 解决:208 题目描述: 给定两个整型数组A和B.我们将A和B中的元素两两相加可以得到数组C.譬如A为[1,2],B为[3,4].那么由A和B中的元素两两相加得到的数组C为[4,5,5,6].现在给你数组A和B,求由A和B两两相加得到的数组C中,第K小的数字. 输入: 输入可能包含多个测试案例.对于每个测试案例,…
Google的面试题在刁钻古怪方面相当出名,甚至已经有些被神化的味道.这个话题已经探讨过很多次,而科技博客 BusinessInsider这两天先是贴出15道Google面试题并一一给出了答案,其中不少都是流传很广的,因此让人感到不过瘾,不少人兴奋地表 示“让难题来得更猛烈吧!”,于是今天又出了续篇,再次贴出了另外15道Google的面试题,但却没有给出答案. 怎么样?下边先来热热身,再来看看你有没有可能去Google工作吧! 第一题:多少只高尔夫球才能填满一辆校车?(职位:产品经理) 解析:通…
Google面试题 股市上一个股票的价格从开市开始是不停的变化的,需要开发一个系统,给定一个股票,它能实时显示从开市到当前时间的这个股票的价格的中位数(中值). SOLUTION 1: 1.维持两个heap,一个是最小堆,一个是最大堆. 2.一直使maxHeap的size大于minHeap. 3. 当两边size相同时,比较新插入的value,如果它大于minHeap的最大值,把它插入到minHeap.并且把minHeap的最小值移动到maxHeap. ...具体看代码 /***********…
有一道 JavaScript 面试题. f = function () { return true; }; g = function () { return false; }; (function() { if (g() && [] == ![]) { f = function () { return false; }; function g() { return true; } } })(); console.info(f()); 首先看前两行 var f = function () {…
题目: 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. 找工作,准备看写题目,题目说是Google面试题,遂很认真地自己做了下. 找规律: 其实可以从中找出数列的规律.求从1到n数字中的1共有多少个,会想到按照数字的位数来观察观察,比如1位数字里(从1到9)共有1个,记W[1]=1:2位数字里(01到99)共有W[2]个,3位数字(001到999)共有W[3]个,定义如下数组: }; in…