【总】算法、数据结构、语言 整理
头条面试
1.打印一棵树右侧的轮廓
class Node
{
int value;
std::vector<Node*> children;
}
2.删除单链表中重复的节点
3.map相关的 (STL 要会用)
4.文本处理的
a.txt
name age
Alice 21
laura 22
输出
b.txt
name Alice laura
age 21 22
5.输出一字符串中出现次数最多的字符和次数
https://www.jb51.net/article/153211.htm
星环科技
问题1.
一个大文件 里面时int型数字,输入一个数字,判断数字是否在里面:
int型 大小 -(2^31+1) ~ 2^31
遍历一遍文件,每个数字作为下标,用一个bit记录。这里用一个char记录一个bit,会浪费7bit。
要 2^32 个bit,
正数: 用一个bitmap1数组
负数:用一个bitmap2数组
但是不能直接char bitmap[2^32],因为临时变量时从栈上分配的,会不够,用new从堆上分配可以吗?
int main()
{
ifstream fp;
int rc=fp.open("test.txt",ios:in);
if(rc==0)
{
cout<<"fail to open the file"<<endl;\
return 0;
}
int tmp;
/*这里是用一个char 即8个bit记录一个bit的消息,浪费了
若用bit 记录,那么 每个 tmp /8 作为数组的索引,tmp%8 作为char里面bit的索引,
tmp/8
bitmap1[tmp/8] = (1<< tmp%8) | bitmap1[tmp/8] ;
*/
char *bitmap1=new char[2^32];
char *bitmap2=new char[2^32];
memset(bitmap1,0,sizeof(bitmap1));
memset(bitmap2,0,sizeof(bitmap2));
while(!fp.eof())
{
fp>> tmp;
if(tmp>0)
bitmap1[tmp]=1;
else
tmp=-tmp;
bitmap2[tmp]=1;
}
int indata;
cin>>indata;
if(indata>0)
{
if(bitmap1[indata])
cout<<"find the data"<<endl;
else
cout<<"fail to find the data"<<endl;
}
else
{
indata=-indata;
if(bitmap2[indata])
cout<<"find the data"<<endl;
else
cout<<"fail to find the data"<<endl;
}
return 0;
}
问题2.
单链表删除重复节点 1->1>1->2>3>5>6 变为 2->3->5->6 2->4->8->8->9->11 变为 2->4->9->11
https://blog.csdn.net/gatieme/article/details/51604199
https://zhuanlan.zhihu.com/p/33638917
问题3.硬币找零问题 面值数组 vector<int>={1,2,5......} amount=11,找出用最少硬币数。
ucloud面试
1.判断单链表是否有环
慢指针1步,快指针2步,若是有环,那么最终两个指针会在环里一直绕直到相遇,否则链表结束。
2. 一个数组,[1,-3,2,5,-2,6,2```]找出里面三个一组和为0的组合。
3.void memcpy(void * src,void *dst, uint32_t length){} 实现memcpy函数 把src处length长度的数据拷到dst处
https://blog.csdn.net/laoyang360/article/details/8020409
数据结构与算法
https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/Readme.md
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html?utm_source=wechat_session
9、数据结构和算法问题Top 50:
https://hackernoon.com/50-data-structure-and-algorithms-interview-questions-for-programmers-b4b1ac61f5b0
10、编程面试中的链表问题Top 30:
http://javarevisited.blogspot.sg/2017/07/top-10-linked-list-coding-questions-and.html#axzz4xXS86IVo
11、基于数组的编程问题Top 30:
http://javarevisited.blogspot.sg/2015/06/top-20-array-interview-questions-and-answers.html#axzz4tUeeQOAU
12、电面编程问题Top 50:
https://javarevisited.blogspot.com/2015/02/50-programmer-phone-interview-questions-answers.html#axzz5C5tt0mTL
字符串处理
数组相关
最长公共子序列
二叉树遍历
堆
栈
队列
链表
链表的基本操作
1、单链表的创建和遍历
2、求单链表中节点的个数
3、查找单链表中的倒数第k个结点(剑指offer,题15)
4、查找单链表中的中间结点
5、合并两个有序的单链表,合并之后的链表依然有序【出现频率高】(剑指offer,题17)
6、单链表的反转【出现频率最高】(剑指offer,题16)
7、从尾到头打印单链表(剑指offer,题5)
8、判断单链表是否有环
9、取出有环链表中,环的长度
10、单链表中,取出环的起始点(剑指offer,题56)。本题需利用上面的第8题和第9题。
11、判断两个单链表相交的第一个交点(剑指offer,题37)
动态规划
STL快速入门
http://c.biancheng.net/stl/
原理性
c++ 的多态性
vector