2016騰訊實習生線上筆試
阿新 • • 發佈:2019-01-28
第二道是給一個非負整數,輸出n為邊長的蛇形矩陣。按照先行後列的順序輸出即可。
比如:
給一個3,3的蛇形矩陣是
[
[1,2,3],
[8,9,4],
[7,6,5]
]
那麼輸出的就是1 2 3 8 9 4
思路:先構造這個蛇形矩陣,完事兒再直接輸出即可。
#include<iostream>
#include<vector>
using namespace std;
vector<vector<int>> generateMatrix(int n) {
vector <vector<int> > res(n,vector<int>(n,0));
if(!n) return res;
int i = 0;
int colBegin = 0;
int colEnd = n - 1;
int rowBegin = 0;
int rowEnd = n - 1;
while(colBegin <= colEnd && rowBegin <= rowEnd){
for(int c = colBegin;c <= colEnd;++c){
res[rowBegin][c] = ++i;
}
++rowBegin;
for (int r = rowBegin;r <= rowEnd;++r){
res[r][colEnd] = ++i;
}
--colEnd;
if(rowBegin <= rowEnd){
for(int c = colEnd;c >= colBegin;--c){
res[rowEnd][c] = ++i;
}
}
--rowEnd;
if(colBegin <= colEnd){
for (int r = rowEnd;r >= rowBegin;--r){
res[r][colBegin] = ++i;
}
}
++colBegin;
}
return res;
}
int main(){
int n;
cin >> n;
vector<vector<int>> res = generateMatrix(n);
for(int i= 0;i < n;++ i){
for(int j = 0;j < n;++ j){
if(i == n - 1 && j == n - 1){
cout << res[i][j];
break;
}
cout << res[i][j] << ' ';
}
}
return 0;
}
第三道是求一個字串裡最長的非連續迴文序列的長度。
比如 “cabbeaf”,你把c e f 去掉之後得到一個迴文序列 abba。那麼輸出長度4即可。
思路:翻轉下這個字串,然後求翻轉字串和原字串的最長公共子序列即可。
第四道是說一說 stack 和 heap的區別。
為什麼我沒說第一道呢?因為我資料庫還沒開始看。。。。悲催了
能不能面試就看天意了。