面试题目收集(4)

来源:互联网 发布:北航大数据在职研究生 编辑:程序博客网 时间:2024/06/09 00:33

本博客的《面试题目搜集系列不错》

(1)面试题目搜集1

(2)面试题目搜集2

(3)面试题目搜集3

(4)面试题目搜集4

(5)面试题目搜集5

(6)面试题目搜集6



1.google一道面试题目:一个数列中Q中的每个元素至少能被a和b中的一个元素整除。现给定a和b,要求计算出Q的前几项。例如a=3,b=5,则序列:3,5,6,9,10,12....

思路:设计两个index,分别指向被3和被5整除的数,被3整除的数只能每次递增3,被5整除的数只能每次递增5。判断那个小,就添加到数组中,将添加到数组中的索引指向当前的索引。

个人觉得:这个何海涛里面的丑数解法有点雷同,我也是这么悟出来的,必须要设置一个数组保存前面的值

#include <iostream>#include <cstdlib>#include <exception>using namespace std;void printArr(int arr[],int len){if(arr==NULL || len<0)throw new runtime_error("Invalid Input");for(int i=0; i<len; ++i){cout<<arr[i]<<" ";}cout<<endl;}void PrintQ(int num){int *arr = NULL;arr = new int[num];    int fiveIndex = 1;int threeIndex = 0;int index = 2;    arr[0] = 3;arr[1] = 5;while(index<num){int addFive = arr[fiveIndex] + 5;int addThree = arr[threeIndex] + 3;int min = addThree<=addFive?addThree:addFive;if(min == addThree) threeIndex = index;if(min == addFive)fiveIndex = index;arr[index++] = min;}printArr(arr,num);delete[] arr;}int main(){cout<<"By lsj:http://blog.csdn.net/lsjseu"<<endl;PrintQ(10);system("pause");return 0;}


2.剑指offer上面的丑数:我们只把包含2、3、5的数称作丑数,习惯把1称为第一个丑数,求从小到大顺序的num个抽数。

呵呵:按照上面的思想重新解了一遍,换汤不换药。海涛老师给我的灵感。

#include <iostream>#include <cstdlib>#include <exception>using namespace std;void printArr(int arr[],int len){if(arr==NULL || len<0)throw new runtime_error("Invalid Input");for(int i=0; i<len; ++i){cout<<arr[i]<<" ";}cout<<endl;}int Min(int a,int b,int c){int t = a<b?a:b;return t<c?t:c;}void PrintUglyNum(int num){int *arr = NULL;arr = new int[num];    int twoIndex = 0;int fiveIndex = 0;int threeIndex = 0;int index = 1;    arr[0] = 1;while(index<num){int mutTwo = arr[twoIndex] * 2;int mutFive = arr[fiveIndex] * 5;int mutThree = arr[threeIndex] * 3;int mindata = Min(mutTwo,mutThree,mutFive);if(mindata == mutTwo) ++twoIndex;if(mindata == mutThree) ++threeIndex;if(mindata == mutFive)++fiveIndex;arr[index++] = mindata;}printArr(arr,num);delete[] arr;}int main(){cout<<"By lsj:http://blog.csdn.net/lsjseu"<<endl;PrintUglyNum(11);system("pause");return 0;}

3.google的一道笔试题目:一个字符串,压缩其中的连续空格为1个后,对其中的每个字串逆序打印出来。比如"abc   efg  hij"打印为"cba gfe jih"。

思路:用string来解还是蛮不错的,然后借助栈来翻转,省得字符串烦来烦去

#include <iostream>#include <string>#include <stack>using namespace std;string reverseStr(string str){int len = str.size();string ret;stack<char> st;bool begin = true;for(int i=0; i<len;){if(i<len && str[i] == ' '){if(!begin)ret.append(1,' ');begin = false;while(str[i]==' ')i++;}else{while(i<len && str[i] != ' '){st.push(str[i]);i++;}while(!st.empty()){ret.append(1,st.top());st.pop();}}}return ret;}int main(){string str = string("   abc   lsj  hlj");cout<<reverseStr(str)<<endl;system("pause");return 0;}

4.面试员宝典的一道笔试题目:一个字符串,压缩其中的连续空格为1个后,对其中的每个字串逆序打印出来。比如"i am    lsj"打印为"lsj am i"。

思路:先整体翻转,然后单词部分翻转

#include <iostream>#include <string>#include <stack>using namespace std;void reverseSub(char str[],int start,int end){if(!str||start<0||end<0)throw new runtime_error("Invalid Input");if(start>=end)return;for(;start<end;++start,--end){char t = str[start];str[start] = str[end];str[end] = t;}}void reverseStr(char str[]){int len = strlen(str);reverseSub(str,0,len-1);int beg = 0;int end =0;cout<<str<<endl;for(int i=0; i<len;){while(i<len && str[i] != ' ')++i;end = i - 1;reverseSub(str,beg,end);while(i<len && str[i] == ' ')++i;beg = i;}}int main(){char str[] = "ss   i am   lsj";reverseStr(str);    cout<<str<<endl;system("pause");return 0;}

5。描述在浏览器中敲入一个网址并按下回车后所发生的事情(尽量详细)
答:浏览器输入网址之后,首先
步骤1:需要查找域名的IP地址,DNS查找过程如下:
(1)浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。
(2)系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。
(3)路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。
(4)ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。
(5)递归搜索 – 你的ISP的DNS服务器从跟域名服务器开始进行递归搜索,从.com顶级域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会有.com域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。
步骤2:浏览器给web服务器发送一个HTTP请求。请求中也包含浏览器存储的该域名的cookies。可能你已经知道,在不同页面请求当中,cookies是与跟踪一个网站状态相匹配的键值。这样cookies会存储登录用户名,服务器分配的密码和一些用户设置等。Cookies会以文本文档形式存储在客户机里,每次请求时发送给服务器。
步骤3:服务的永久重定向响应
步骤4:浏览器跟踪重定向地址
步骤5:服务器“处理”请求
步骤6:服务器发回一个HTML响应
步骤7:浏览器开始显示HTML
步骤8:浏览器发送获取嵌入在HTML中的对象

有好题待续。。。。

原创粉丝点击