2017小红书校园招聘面试经历
小红书是上海的一家基于b2c的电商,虽然没有阿里巴巴的名气但是也是一家处于快速发展的企业,这个公司对算法比较重视,一上来就要求用递归方法写
一个全排列,幸好还记得一些思路,最后还是被我写出来了,一下是当时写的代码:
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<sstream>
#include<fstream>
#include<cstring>
#include<stack>
#include<algorithm>
using namespace std;vector<vector<int>>get_all_permutation(vector<int>&data, int end){vector<vector<int>>re;vector<vector<int>>tmp;if (end == 0){vector<int>temp;temp.push_back(data[end]);re.push_back(temp);return re;}re = get_all_permutation(data, end - 1);for (int i = 0; i<re.size(); i++){int count = 0;vector<int>::iterator iter;int size = re[i].size();int index = 0;while (count != size + 1){iter = re[i].begin();for (int k = 0; k < index; k++)iter++;re[i].insert(iter, data[end]);tmp.push_back(re[i]);iter = re[i].begin();for (int k = 0; k < index; k++)iter++;re[i].erase(iter);index++;count++;}}return tmp;
}int main() {int num;vector<int>data;vector<vector<int>>re;int count = 1;while (count){num = 0;if (num<1){cout << 0 << endl;return 0;}for (int i = 1; i <= num; i++)data.push_back(i);re = get_all_permutation(data, num - 1);cout << '[';for (int i = 0; i<re.size(); i++){cout << '[';for (int j = 0; j<re[i].size(); j++){cout << re[i][j];if (j != re[i].size() - 1)cout << ',';}cout << ']';if (i != re.size() - 1)cout << ',';}cout << ']' << endl;count--;}return 0;
}//Input: 数字 n
//Output: 以二维数组的形式,输出[1,2,...,n]的全排列。
//例如:当n=3时,输出[[1,2,3], [1,3,2], ..., [3,2,1]]//标准解法:递归。
这种方法比较乱,主要思想是利用插空法,假设我们在a,b,c三个字符的情况下,我们调用函数递归调用返回b,c和c,b那么我们可以将a插入到b,c和c,b的每一位
置,那么对于b,c来说,就会有abc,bac,bca,对于c,b来说,我们就有acb,cab,cba;
但是在正常情况下,我们的输出序列为:
1, 2, 3
1, 3, 2
2, 1, 3
2, 3, 1
3, 1, 2
3, 2, 1
后来又写了另外一种方法:
#include<iostream>
#include<string>
#include<vector>
#include<memory>
#include<fstream>
using namespace std;vector<vector<int>> get_all_permutation(vector<int>&data,int begin){vector<vector<int>>re;vector<int>tmp;if (begin == data.size()-2){//这个时候还剩两个元素tmp.push_back(data[begin]);tmp.push_back(data[begin+1]);re.push_back(tmp);//交换两个数tmp[0] = tmp[0] ^ tmp[1];tmp[1] = tmp[0] ^ tmp[1];tmp[0] = tmp[0] ^ tmp[1];re.push_back(tmp);return re;}re = get_all_permutation(data,begin+1);for (int i = 0; i < re.size(); i++)re[i].insert(re[i].begin(), data[begin]);int num = re.size();for (int i = 0; i < num; i++){//将0号下标和从1号下标开始的元素交换for (int j = 1; j < re[i].size(); j++){tmp = re[i];tmp[0] = tmp[0] + tmp[j];tmp[j] = tmp[0] - tmp[j];tmp[0] = tmp[0] - tmp[j];re.push_back(tmp);} }return re;
}int main(){int num;vector<int>data;vector<vector<int>>re;while (cin>>num){if (num == 0)return 0;if (num == 1){ cout << num << endl; continue; }for (int i = 1; i <= num; i++)data.push_back(i);re = get_all_permutation(data,0);cout << '[';for (int i = 0; i < re.size();i++){cout << '[';for (int j = 0; j < re[i].size(); j++){cout << re[i][j];if (j != re[i].size() - 1)cout << ',';}cout << ']';}cout << ']' << endl;data.clear();}
}
再用树的结构来写一遍(这种思想用到dfs和回溯方法):
#include<vector>
#include<memory>
#include<fstream>
#include<stack>
using namespace std;void get_all_permutation(vector<int>&data,vector<bool>&flag,vector<int>&stk){//begin代表当前的下标int size = data.size();if (stk.size() == data.size()){cout << '[';for (int i = 0; i < stk.size(); i++){cout << stk[i];if (i != stk.size() - 1)cout << ',';}cout << ']';return;}for (int i = 0; i < size;i++){if (flag[i] != true){//可以继续访问flag[i] = true;stk.push_back(data[i]);get_all_permutation(data,flag,stk);stk.pop_back();flag[i] = false;}}
}int main(){int num;vector<int>data;vector<vector<int>>re;vector<bool>flag;while (cin>>num){if (num == 0)return 0;if (num == 1){ cout << num << endl; continue; }for (int i = 0; i < num; i++)flag.push_back(false);for (int i = 1; i <= num; i++)data.push_back(i);cout << '[';int count = 0;vector<int>stack;get_all_permutation(data,flag,stack);cout << ']' << endl;data.clear();flag.clear();}
}
可以用STL里面的next_permutation函数实现一遍
2017小红书校园招聘面试经历相关推荐
- 阿里巴巴2015校园招聘面试经历(笔者面试问题----倾情奉献)
8.29号笔试,9.1号官网显示笔试通过请预约面试时间,预约了9.17号下午三点面试. 投入更加紧张的准备中,先把项目中的各种可能被问到的细节问题想到,然后再总结自己当时的解决办法和思路.最后,把各种 ...
- 上海汉得校园招聘面试经历
前天,昨天,两次面试,终于通过了. 这是一个怎样的公司,有兴趣的人相信自己会上网查的,至于面试,可以说是非常自由的形式,这是我第一次面试,大三下学期,也是人生第一次正式的面试. 由于这 ...
- 2017年联通软件研究院校园招聘面试经历
本人简单做总结.笔试比较简单,都是一些基础知识,选择,简答和编程.选择包含数据库和软件开发和数据结构的一些基础知识,例如SQL语句,黑盒测试和白盒测试等,简答题就是SQL语句分类,还有就是全局变量和局 ...
- 华为2014校园招聘面试经历
又到了一年的就业季,我也成了找工作的茫茫大军中的一员.因为自己的本科出身实在不敢恭维(我非常热爱我的母校),所以对自己将来读博之后的出路非常迷茫.于是开始了我的找工作征程,无论将来是否读博,我想找工作 ...
- 2012腾讯校园招聘面试经历
我投的终端软件,隶属于3G产品部门.很遗憾,止步于2面.2面的知识点太广泛了,确实没有想到知识点那么广泛. 腾讯的笔试题目比较基础 具体的题目记不清除了,设计到的知识点: 1.c语言基础:sizeof ...
- 网易2017实习生招聘面试经历
网易面试经历总结: 面试是在杭州网易大厦进行的,面试的职位是C++开发工程师(网易杭州)-杭州研究院-公共技术 有些问题可能不是太准确,但是大概是那个意思. 一面: 1. 自我介绍技术面的自我介绍不用 ...
- 阿里巴巴2015校园招聘面试大礼包
1. 1. 阿里面试 1.1沈阳阿里2014校园招聘研发面试 日期:2013年9月 地点:沈阳 岗位:软件研发 收到通知是上午10点40的面试,因为面试地点在学校附近,所以早上9点就到了. 休息区等面 ...
- 华为勇敢星实习生招聘面试经历和华为优招面试经历
我参加的是华为2017年(针对18年毕业的应届生)武长地区的华为优招,面试之前也在网上搜了很长时间的关于优招的面试经验贴,没有搜到多少相关的资料.所以写下这篇帖子,希望能够帮到后续参加华为优招的同 ...
- 腾讯校园招聘面试的秘密
转自公司同事戴钊的文章 由于从事基层管理岗位的原因,最近两年有机会在武汉.南京.上海等地进行校园招聘,为公司选拔优秀人才,在这个过程中接触过一百多名各种类型的应聘毕业生,我深深为这些莘莘学子渴望进入腾 ...
最新文章
- vmware安装ubuntu的一些成功技巧
- Eclipse Java注释模板设置详解
- python网络爬虫_Python爬虫实战之网络小说
- JavaScript高级之ECMASript 7、8 、9 、10 新特性
- 程序员面试金典 - 面试题 04.03. 特定深度节点链表(BFS)
- LeetCode 137. 只出现一次的数字 II
- es6—变量的解构赋值
- JAVA中的继承和覆盖
- JUnit for Android入门2 JUnit断言
- Internet浏览器,C:\fakepath路径问题
- css设置动画匀速运动,CSS3 transition动画
- Unity_UIBuilder插件入门
- 基于MFC和c++的销售管理系统,课程设计,实训
- Python:实现currency converter货币换算算法(附完整源码)
- VMware安装虚拟机详细教程
- NUMERIC和DECIMAL区别
- 网络监控器mrtg全攻略
- 推荐语、学生和网友留言——《逆袭大学》连载
- 2022-2028全球与中国3-甲基吡啶市场现状及未来发展趋势
- 删除文件时显示该文件不在此文件夹中的原因