第一题是给你一堆坐标,找出里面可以组成矩形的点并且计算面积?忘记了,当时题目扫了一眼就直接跳过了。。。
第二题是一个队列中元素进行一些列的操作,输出是1,2,3,4....n按顺输出,问你原来的序列是多少。
这个其实就是每次都跳过一个可用位置然后在下一个位置放入数字,如果到达容器尾部,那么再从头开始搜索,知道全部位置都放了数字。
简直天杀的,这个最后我调出来超时了2分钟,结果自动交卷了 T T码代码的速度很重要啊,还有OJ平台是真的烂,笔试的平台感觉一个比一个烂!
代码如下:
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
int findNextIndex(vector<int> &isSelected, int index) {
int count = 0;
int res = 0;
for (int i = index; i <= isSelected.size(); i++) {
if (i == isSelected.size()) {
i = 0;
}
if (isSelected[i] == 0 && count == 0) {
count = 1;
}
else if (isSelected[i] == 0 && count == 1) {
res = i;
break;
}
}
return res;
}
int main() {
int n;
cin >> n;
vector<vector<int>> res;
while (n > 0) {
n--;
int k;
cin >> k;
vector<int> isSelected(k, 0);
vector<int> result(k, 0);
int count = 1;
int curNum = 1;
int index = 0;
while (curNum <= k) {
index = findNextIndex(isSelected, index);
result[index] = curNum;
curNum++;
isSelected[index] = 1;
}
res.push_back(result);
}
for (int i = 0; i < res.size(); i++) {
for (int j = 0; j < res[i].size(); j++) {
cout << res[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
第三题是洗牌算法,给你一堆牌里面有2n张牌,让你洗K次,每次将2n张牌分为2堆,1-n和n+1-2n,然后先放右手1张牌,再放左手一张牌。。。如此反复,直到所有牌都放完,其实还是很简单,但是感觉每次码代码都有各种小问题,我就因为只存了左手的数结果折腾了半天,太傻X了。。。。
思路就是:交错放置,其实我的代码并不怎么好,每次都要生成O(n)的额外空间,感觉效率也不怎么样,反正OJ平台也没给我任何反馈,也不知道对不对。。。。
#include <vector>
#include <iostream>
using namespace std;
void swapinsert(vector<int> &source, int n ) {
vector<int> temp( source );
for (int i = 0; i < n ; i++) {
source[2 * i] = temp[i];
source[2 * i + 1] = temp[n + i];
}
}
int main() {
int m;
cin >> m;
vector < vector<int>> res;
while (m > 0) {
int n;
int k;
cin >> n >> k;
vector<int> source;
int num;
for (int i = 0; i < 2 * n; i++)
{
cin >> num;
source.push_back(num);
}
m--;
while (k > 0) {
swapinsert(source, n);
k--;
}
res.push_back(source);
}
for (int i = 0; i < res.size(); i++) {
for (int j = 0; j < res[i].size(); j++) {
cout << res[i][j] << " ";
}
cout << endl;
}
}
又是一次失败的笔试T T网易虐我千百遍,我待网易如初恋。。。我大概和网易没缘分吧,实习笔试刷我,杭研笔试刷我,有道笔试估计又要被刷,现在就剩个网易游戏了.......呵呵呵呵呵呵呵......