面试算法题实例
以下算法题都是我秋招和实习在面试当中实际遇到的题目。
美团搜索
- 给一个数组,求前 k 大的元素
- 二分查找
触宝科技
- 使用+,-,*,/,() 判断 4 个正整数是否可以算出 24 点
#include <iostream> #include <vector> using namespace std; bool helper2(vector<int>& v,int i,int cur) { if(i==v.size()) { if(cur==24) return true; else return false; } if(helper2(v,i+1,cur+v[i])) return true; if(helper2(v,i+1,cur-v[i])) return true; if(helper2(v,i+1,cur*v[i])) return true; if(helper2(v,i+1,cur/v[i])) return true; return false; } bool helper(vector<int>& v){ bool res = false; if(v.size()<4) return false; for(int i=0;i<v.size();++i) { for(int j=0;j<v.size()&&j!=i;++j) { for(int k=0;k<v.size()&&k!=i&&k!=j;++k) { for(int m=0;m<v.size()&&m!=i&&m!=j&&m!=k;++m) { vector<int> tempv; tempv.push_back(v[i]); tempv.push_back(v[j]); tempv.push_back(v[k]); tempv.push_back(v[m]); res = helper2(tempv,1,tempv[0]); if(res) { return true; } } } } } return false; } int main() { vector<int> v{3,5,7,2}; bool res = helper(v); cout << res << endl; }
地平线
- 给出一个 二叉搜索树求差最小的两个节点的差值
- 给出一个数组求出最大面积
阿里
- 反转一个句子当中的单词的顺序
- CanTransform:
如hit->hat,hat->cat,cat->fat。但是不能单步从hit->hog。设计算法判断给定输入能否在字典范围内经过任意次步骤完整转换。 - 一个二叉树上求两个节点之间路径长度的最大值,说出具体的思路。
百度
- 找到不含重复字符的最长子串的长度
- 2n*2n 的方阵顺时针转 90 度。
快手
- 给你1GB数据,数据都是字符串,按照字典序全排序怎么做?
旷视
- 整型数组 on 最短的连续子数组之和 不小于 M 求得是 Min 长度
商汤
- 按顺序打印二叉树的每一层的最后一个节点的值
小马
- 将 1-n 这 n 个数按照 string 大小排序
依图
给一个循环有序的数字查找目标元素。
两个有序数组合并
k 个有序数组归并
输入一个 2 维数组,行和列都从小到大有序,判断给定的值是否存在
定义整数的位数叫做整数的长度,定义一个整数的地位只要大于等于他的高位就是不下降。给一个值 k,求出所有长度为 k 以内的满足不下降的整数的个数。
给你一个字符串,是一个json格式字符串,将给定的k的v替换成指定的字符串,如果出现多层嵌套只修改最里层的。
长度1001的数组只有一个数字出现大于1次,所有的数字都在1~1000,如何找到这个重复的数字,尽量的节省空间
两个有序数组 一个目标值target 需要从两个有序数组当中各找到一个数字使得两个数字的和为target
三个有序数组如何实现?
腾讯
- o(n)时间,1个变量实现洗牌
- 不用变量交换两个整型有什么方式,实现一下。
- 写一个优化版本的快排
字节
最长回文子串
给你一个字符串,字符串当中是一段c语言的代码和注释,注释只有/* */这样的可以嵌套,不包含//
1.请返回去除所有注释的代码
2.如果代码当中的/和/可以不完全匹配如何告知出现错误
给你一个2G的电脑 10G的文本 文本有1k行的字符串,要求输出所有互为逆序的字符串的组合