设为首页 加入收藏

TOP

Google笔试题整理(超全!)附部分答案(三)
2014-11-23 21:32:03 来源: 作者: 【 】 浏览:41
Tags:Google 试题 整理 超全 部分 答案
5, 2, -5, -3, 12, -9的最大子序列的和为20。 对于这个问题,最简单也是最容易想到的那就是穷举所有子序列的方法。利用三重循环,依次求出所有子序列的和然后取最大的那个。当然算法复杂度会达到O(n^3)。显然这种方法不是最优的,下面给出一个算法复杂度为O(n)的线性算法实现,算法的来源于Programming Pearls一书。 在给出线性算法之前,先来看一个对穷举算法进行优化的算法,它的算法复杂度为O(n^2)。其实这个算法只是对对穷举算法稍微做了一些修改:其实子序列的和我们并不需要每次都重新计算一遍。假设Sum(i, j)是A[i] … A[j]的和,那么Sum(i, j+1) = Sum(i, j) + A[j+1]。利用这一个递推,我们就可以得到下面这个算法:


int max_sub(int a[],int size)


{


int i,j,v,max=a[0];


for(i=0;i

{


v=0;


for(j=i;j

{


v=v+a[j];//Sum(i, j+1) = Sum(i, j) + A[j+1]


if(v>max)


max=v;


}


}


return max;


}那怎样才能达到线性复杂度呢?这里运用动态规划的思想。先看一下源代码实现:


int max_sub2(int a[], int size)


{


int i,max=0,temp_sum=0;


for(i=0;i

{


temp_sum+=a[i];


if(temp_sum>max)


max=temp_sum;


else if(temp_sum<0)


temp_sum=0;


}


return max;


}



在这一遍扫描数组当中,从左到右记录当前子序列的和temp_sum,若这个和不断增加,那么最大子序列的和max也不断增加(不断更新max)。如果往前扫描中遇到负数,那么当前子序列的和将会减小。此时temp_sum 将会小于max,当然max也就不更新。如果temp_sum降到0时,说明前面已经扫描的那一段就可以抛弃了,这时将temp_sum置为0。然后,temp_sum将从后面开始将这个子段进行分析,若有比当前max大的子段,继续更新max。这样一趟扫描结果也就出来了。




google面试试题汇总(转)


笔试题目:9道单选+3道问答” W, B2 n2 A8 m2 P+ T) t


时间:100分钟/ A) Z; e4 * l( d9 Y, v’ K


我做的是B卷。3 N1 B; C6 j& T# L/ N) r


单选题:


& ^: g i/ T g” n2 p3 {1,求两个二进制数的异或值,基本上学过一点计算机的东西的人都能对的题目。。


! ; v6 f/ Y’ }9 P2,不记得了。。也是不需要思考的题目。。


2 ]# P Z’ p! u: N3,大概是如下的函数:& `; n7 E7 B2 A n- N7 h) Y


int someFunc(int x){* ]7 D# _; F# m. b


if (x == 0)


8 S5 {, T9 ~4 ~8 L2 Q2 G3 c! I return 0;( h5 ]5 A& v: { x


else” l8 _% U) R4 L* l


return x + someFunc(x – 1);


2 t1 k- d# D” \/ k7 Q1 E( M3 ]}6 H- K c5 W9 W) J6 Y8


问这个计算的是什么。。。% U! m: L/ n, s6 z8 s$ B$ S8 N


4,不记得了。。不需要思考吧。。


o7 {3 q, e’ y+ k2 C. ~’ B# N5,不记得了。。不需要思考吧。。


+ i# F8 y T# T+ R& x; L6,参见2,4,5。。- a1 d! b; }4 w% {2 Y9 @


7,似乎需要思考一下。。 u5 F c; W, l0 S


8,问链表结构和数组相比的优势不包括哪项,


$ Q2 U7 C/ v5 `- z. i/ l包括:1 S8 ]. C’ Z# C” G” c


插入的时间/ q: x. R2 f6 w’ |: x2 H9 j8 D4 y$ R


删除的时间1 S/ \’ S2 b- T% U! I+ J7 I


存储空间2 V8 L& ~; s8 y6 O% T2 y


剩下两个不记得了。。


” ]- `, P4 q! `6 ]2 k9,如下函数:1 z8 T3 U# I- C( v. R$ x# N+ u% s


T(x) = 1 (x <= 1)


8 s5 i; R: G+ V& S# A* aT(n) = 25 T(n/5) + n^2


# \7 p8 L* J- t问T(n)随n的增长。


. U# 6 F0 ^* W选项大概是这样的:% Q+ N’ U- `1 I. I( z: {* l9 Q, y


O(n^2),O(n^2logn)等等的。。


/ C$ _; R Q5 x) n1 ^ O” f8 v5 L, d( g5 ]


问答:1 J- M$ I. k% x+ W+ H/ g


1,写两个N*N的矩阵的乘法,给出了C的格式,你可以选择你喜欢的语言去写。。0 s: v” H- {( Y- Q$ ]5 O2 y


int* multi(int* a1, int* a2, int N){; ] s5 H2 a/ w) W5 B1 X


}! [* e: q. v; P" V) w7 S; Q+ H$ _


2,寻找一个单向链表的中项,如果存在两个则返回前一个。给出了C的格式,同样你可


) a' l& R5 K2 h1 q0 F7 R以选择。。。。


7 `' g$ j( V+ ] zstruct {0 W” _! x/ H8 }3 G; {4 i4 d


Node* next;


$ T5 @# y; N3 I h% E } int value;


) I+ z’ ~4 F1 @: H4 a} Node;2 U; p1 U, \/ G9 l7 R/ C; `. e


Node* someFunc(Node* head){


5 s* P+ X1 }7 N, }}


. p6 J! l$ s4 H0 o& }. E3,给一个长度为n的整数数组,只允许用乘法不允许用除法,计算任意(n-1)个数的组合


+ c% {$ E% g8 v: F, r( c2 \& |2 z乘积中最大的一组。。。写出算法的时空复杂度。$ r4 A* _/ l0




Google笔试题2006


选择题


. A6 z* e9 `& Z$ z x- Q/ N& n# _( E$ p& R ]9 s0 P% 5 w


1. 把一个无符号16位整数a的最高为置为1


2. Fibonacci,求f(4)使用递归调用f(1)的次数f(n) = f(n-1)+f(n-2)


3 D0 B1 Y3 F7 X( B4 l: Y5 p8 R# B( Zf(0)=0, f(1)=1


, U& b1 B0 d7 x; e. d# h% Ra.5 b.4 c. 3 d. 4以上


! I’ u2 v: y# f’ t N3 k(


‘ W& |2 O$ w+ m& K1 B, _3. if (xAS{print “1″}. ]% i6 E’ M8 L2 K


S->AB{print “2″}


9 ~& c2 p. D* D+ lA->a{print “3″}’ X/ h’ O” y3 p3 k. h’ J’ c


B->bC{print “4″}+ t6 {( e’ j2 X7 Y; q6 y! W


B->dB{print “5″}


‘ v# E6 R6 S1 _! hC->c{print “6″}


3 D& N2 c2 k9 k


0 C# x6 ]# @0 m’ X% w8 |- P6. 有关哈希表正确的说法(不定项)3 L7 j’ N. b9 f. z9 A


a.哈希表的效率和哈希函数。。。。相关3 h* O& P9 j- Z’ N


b.哈希表的解决冲突方法慢,回影响哈希表效率’ r2 r( {) y0 @* r7 U ]


c.使用链表哈希可使内存紧凑


2 h- Y7 l6 i) l% G$ s, m. f$ 9 X, g0 `$ V8 z6 m. Z: H


7. 一种无饥饿调度方法是:


9 L+ j8 O! V) `) x; Wa. 轮叫调度


( ^9 }! M& R6 @1 c0 Yb.


! s2 ], x” K: X/ \: pc. 最短使用时间


/ m! F: }* {1 H4 X% td. 最新队列. A; e- m9 U5 n9 t( Z9 S9 k



& e, Q ^# e! u1 n: C8. 下列排序方法最差情况时间复杂度为O(n^2)的是:


& z5 u) x/ z, Q0 `5 O; ma. 插入# R9 V* x7 \2 i


b. 归并


2 a Z! x8 o$ `. \c. 冒泡


! Y* I. Q6 z f% S! D6 t( xd.

首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C#中的验证控件有几种 下一篇谁是盗窃犯

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: