现在的位置: 首页 > 综合 > 正文

100题 1-255简单总结

2018年05月02日 ⁄ 综合 ⁄ 共 4993字 ⁄ 字号 评论关闭

2.min栈:2个栈,存放最小值,push比较<=,pop比较;
3.子数组的最大和:遍历一遍,sum<0,置0,否则相加
4.在二元树中找出和为某一值的所有路径:回溯,递推,三个二叉树遍历
5.查找最小的 k个元素:大根堆不好,k个数组,o(k*(n-k))
7.微软亚院之编程判断俩个链表是否 相交:尾节点是否相同(无环) 3种(有环) 环:(快慢指针)
8.字符串比较,链表倒置等
9 判断整数序列是不是二元查找树的后序遍历结果:二叉树特点:左边<根 右边>根 递归
10 翻转句子中单词的顺序:两次反转
11 求二叉树中节点的最大距离:把最深的左子树距离加上最深的右子树距离就是二叉树中两个节点的最大距离
12 求1+2+…+n:递归sum+=x;  return x&&fun(x-1);  
13 输入一个单向链表,输出该链表中倒数第k个结点:正数第n-k个,2个指针
14 在数组中查找两个数,使得它们的和正好是输入的那个数字:升序的,头尾遍历即可
15 输入一颗二元查找树,将该树转换为它的镜像:递归,BFS;不为空,交换左右,继续遍历
16 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印:BFS
17 在一个字符串中找到第一个只出现一次的字符:hash计数,再遍历一遍输出
18 n个数字,每次从这个圆圈中删除第m个数字,求剩下的最后一个数字:约瑟夫环
20 输入一个表示整数的字符串,把该字符串转换成整数并输出: 正负,非法输入,等
21 整数n和m,随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来:回溯
24 单链表就地逆置,合并链表: 开始都为空除了P next=p->next;p->next=previous;previous=p; p=next; 
26 左旋转操作:把字符串前面的若干个字符移动到尾部:*p=str+n;找到最后位while(*p!='\0')  *p++=*str++; 
27 跳台阶,跳1级或2级,求总共多少跳法:递推
28 整数的二进制表示中1的个数:n=n&(n-1);c++;//每次去除1 if(n&1)c++; n=n>>1;  
29 栈的 push、pop 序列:等于就出栈
30 在从1到n的正数中1出现的次数:编程之美公式 0:iCount+=High*iFactor;  1:iCount+=High*iFactor+Low+1;    
   iCount+=(High+1)*iFactor; 
40_2 取出首尾相连的珠子中一段,要求包含所有N颜色,并长度最短:循环遍历
42 修改append函数,实现:两个非降序链表的并集:h1,h2 相等,h1空,h2空
43 递归和非递归俩种方法实现二叉树的前序遍历:非递归实现类似BFS
46 四对括号可以有多少种匹配排列方式:卡特兰数 回溯实现
45 整数数组,将其分为m份使各份的和相等:比较复杂
47.求一个数组的最长递减子序列:B[i]=max{B[k]+1,A[i]<A[k] && 0=<k<i},B[0]=1 ;2个循环,i=1-len j=0-i < & dp+1<
48 一个数组是由一个递减数列左移若干位形成的,然后查找某一个数:移位后的二分查找 有一边是单调递减的,从这下手
51.和为 n 连续正数序列:n/2 j2=sqrt(4*i*i+8*n-4*i+1)-1;判断j2是否为整数
53.字符串的排列:字符串的全排列 for(j=index;j<n;j++) swap printAllArray(a,n,index+1); 
54 调整数组顺序使奇数位于偶数前面:快速排序的partition 两个指针
55 类 CMyString 的声明;CMyString(char* pData=NULL);//1,2  ~CMyString();  CMyString(const CMyString &str);//3  
   CMyString& operator=(const CMyString &str);//4  
57 用俩个栈实现队列 2个栈 s1,s2 入队时,将元素压入s1。 出队时,判断s2是否为空, 如不为空,则直接弹出顶元素; 
   如为空,则将s1的元素逐个“倒入”s2,把最后一个元素弹出并出队。 
56 最长公共字串:算法导论的公式,注意初始化
c[i,j]=0                      i=0||j=0 
      =c[i-1,j-1]+1           a[i]==a[j] 
      =max(c[i-1,j],c[i,j-1]) a[i]1=a[j]   
58 从尾到头输出链表:1翻转输出2栈实现3递归实现同栈
60 在 O(1)时间内删除链表结点:后一个节点等于删除节点的值;注意判断删除后有无节点,1个节点,无节点;
61 找出数组中两个只出现一次的数字:异或处理;
62 找出链表的第一个公共结点:无环,人工建环;有环;
63 在字符串中删除特定的字符:hash处理字符串2,判断1的hash是否存在;删除用2个指针操作
64 寻找丑数:3个index;寻找最大的;相同++;
66.颠倒栈:s->pop();  //每次取出栈顶元素reverse(s);  //颠倒栈剩下的元素 PushToButtom(s,top);  //把栈顶元素放入底部 
67 俩个闲玩娱乐。扑克牌的顺子:0可以补任何顺子;
68 把数组排成最小的数:32 321=>32321 32132最小;直接字符串连接后比较排序
69.旋转数组中的最小元素:二分查找
71 数值的整数次方:类似矩阵相乘
73 对策字符串的最大长度:就是回文的判断;分奇偶处理
74.数组中超过出现次数超过一半的数字:逐个向后 遇相同加 不同减 最后就是最大的出现次数 2:利用哈希表或者数组统计每个字符出现的次数,然后从里面找到出现次数超过一半的 
   方法3:排序后,取数组的中间元素,因为次数超过一半  
75 二叉树两个结点的最低共同父结点:根节点判断左右子树递归;
78 链表和数组的区别:1.数组静态分配内存,固定的长度,链表动态分配内存;2.数组在内存中连续,插入、删除操作的效率比较低;链表不连续;随机访问效率比数组低
   3.数组元素在栈区,链表元素在堆区;
79 实现数组排序 实现 strstr():2次循环
81 数组左边的数都小于等于它,右边的数都大于等于它,寻找这个数:辅助数组,记录每一个元素右侧的最小值,在顺序遍历 保存当前最大值 即左边最大的 那么若两者相等 则满足  
81 3.STL的 set用什么实现的?为什么不用hash? 
    红黑树实现的,红黑树是一种平衡性很好的二分查找树。 
    要使用hash的话,就需要为不同的存储类型编写哈希函数,这样就照顾不到容器的模板性了, 
    而是用红黑树只需要为不同类型重载operator<就可以了。 
    hash_set是以Hash table(哈希表)作为底层数据结构的。set可以在时间复杂度为O(logN)情况下插入、删除和查找数据。 
hash_set操作的时间复杂度则比较复杂,这取决于哈希函数和哈希表的负载情况 而散列的好处之一是,随着数据的增长,你不需要再散列数据了。  
83  memmove:拷贝src所指的内存内容前n个字节到dest所指的地址,注意重叠问题
84_1 最快的方式把其中重复的元素找出来:hash处理
84_2 构造一个随机发生器
85 复制两个字符串 A 和 B。字符串A的后几个字节和字符串B的前几个字节重叠:寻找第一个串与第二个串的匹配点
85 返回子字符串的个数: strncmp(char *str1, char *str2, int maxlen);比较字符串str1和str2的前maxlen个字符
86 怎样编写一个程序,把一个有序整数数组放到二叉树中:二叉树建树过程,中间,左右建树
87 大整数数相乘
87 实现strstr功能,即在父串中寻找子串首次出现的位置。
88 函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,
   函数返回串中字符'*'的数量:同快速排序partition
89.1实现字符串转整型的函数(实现函数 atoi 的功能):
   2快速排序:partition,quicksort
   3两个串中的第一个最长子串:暴力解决
90. 1.不开辟用于交换数据的临时空间:2个指针前后交换 2.字符串的删除 覆盖删除 
91 一道著名的毒酒问题:二进制处理
93 长度大于=3的最长的等差数列:dp
96 char *strcpy(char *strDest, const char *strSrc);
99 智力题:1.烧一根不均匀的绳,从头烧到尾总共需要 1 个小时,弄到1小时15分钟;两头烧;
   2 3公斤,5公斤的桶,不均匀,称出4公斤;3+3-5=1,1+3=4
   3 诚实国永远说实话,说谎国永远说谎话。现在你要去说谎国,但不知道应该走哪条路:怎么样去你的国家?然后选择相反的路即可

101 微软面试:1海盗 2飞机加油
123 请用 A 中的元素组成一个大于 K 的最小正整数
118 如何随机选取1000个关键字
120、给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数:rand5()*5+rand5()  (a-3)/3
121、1024! 末尾有多少个 0? num += n / 5;  n = n / 5;  
134 把十进制数(long 型)分别以二进制和十六进制形式输出,不能使用 printf系列
128 小数点 高精度乘法
129 腾讯1 2 5 10能够在 17分钟内这四个人都过桥?
138 顺时针打印矩阵
140 打印出所有不同的排列 4不能在第三位,3与5不能相连:全部排列,然后控制输出
145 局部变量、全局变量和静态变量
144 堆和栈区别
143 Smith夫妇召开宴会,握手次数;
144 不同颜色的球的概率
150 输入四个点的坐标,求证四个点是不是一个矩形
151 矩阵式螺旋输出
152 求两个或N个数的最大公约数和最小公倍数
153 最长递增子序列
154 字符串原地压缩:“eeeeeaaaff"  压缩为  "e5a3f2"
157 求最大重叠区间大小
158 整数的素数和分解:
161 通配符匹配
162 给一个有N个整数的数组S..和另一个整数X,判断S里有没有2个数的和为X:排序后首尾逼近
162 让你排序N个比N^7小的数,O(n):基数排序
165 查找出每个字符的个数:hash[256],大于0,就输出
166 请把一个整形数组中重复的数字去掉:遍历一遍确定hash大小,然后hash处理,结构体处理正负
167 请编程实现全排列算法
168 生小孩数 1/2、3点15角度 7.5 、8瓶水有毒 log2(8)=3;
第一部分、十道海量数据处理面试题
第二部分、十个海量数据处理方法大总结
172 rand7()构造rand()  a1*7+a2<40,==> (a1*7+a2)/4为0-9;则b=(a1*7+a2)/4+1,如果a1*7*a2>=40,重复第一步。
186 CONST的概念
188 求这个队列中从队列投到队列尾的元素个数 (rear-front+1+m)%m。
221 1、三次握手;2、死锁的条件
231 1、C ++为什么经常将析构函数声明为虚函数?2、inline 和#define的如何定义MAX 
    3、const 的用法 
    如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
    如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。
    左边 指针所指向的内容为常量,这种情况下不允许对内容进行更改操作,如不能*a = 3 ;
    指针本身是常量,而指针所指向的内容不是常量,这种情况下不能对指针本身进行更改操作,如a++是错误的;
    指针本身和指向的内容均为常量。
235 1、动态链接库与静态链接库的区别 2、指针与引用的区别 3、进程与线程的区别 4、函数调用入栈出栈的过程 C语言函数参数进栈顺序是自右向左 出栈顺序自左向右
238 找出所有等价(equivalent)的表达式 3*5 == 5*3  :字符串处理 分三段 
245 写一个程序,打印出以下的序列:(a),(b),(c),(d),(e)........(z) 先全排列 然后去除不符合的 
250 1、静态方法里面为什么不能声明静态变量? 3、抽象类和接口的具体区别是什么?
251 5、tcp/ip 的那几层协议,IP 是否是可靠的?为什么?
    6、进程和线程的区别和联系
    10、sizeof 和 strlen 的区别
    11、malloc-free 和 new -delete 的区别

抱歉!评论已关闭.