今日頭條 2018 AI Camp 視訊面試
阿新 • • 發佈:2019-01-02
1. 本次面試是在牛客網平臺進行的,沒有涉及到技術細節,面試官也說僅僅是聊天。但是,不知道是網路卡頓還是平臺緣故,連線非常不穩定,經常聽不到聲音,對方那邊噪音也特別大,面試體驗不是很好。
2. 面試時間三十分鐘,大體上問了以下幾個方面的問題:
- 自我介紹?
- 有沒有閱讀過原始碼的經歷,假如給你一份原始碼,你準備怎麼閱讀?
- 大學期間自學過什麼知識,是如何自學的?
- 專案介紹以及目前取得的成果?
- 在專案中遇到過哪些問題,怎麼解決的?
- 大學裡堅持過哪些事情?
3. 前面這些問題都是一些開放性問題,只在最後問到了一個附加程式設計題。
給定一個無序陣列,找出某一元素後面第一個比它大的數字。
思路:用棧來實現。
- 從第一個元素開始進棧,每次對棧頂元素和序列的下一個元素進行比較,直至找到第一個比它大的數再出棧。
- 若棧頂元素小於序列元素,此序列元素即為後面第一個比它大的數,棧頂元素出棧,繼續進行比較;若棧頂元素大於等於序列元素,則繼續將此序列元素壓棧,再進行下一輪比較;若棧為空,則壓入當前正在比較的序列元素。
- 若比較到最後一個元素同時棧為空或者最後一個元素依然小於等於棧頂元素,則比較結束。
程式碼如下:
/*
找出一個無序序列中在某個數後面第一個比它大的數
測試用例如下:
6 3 1 5 4 2 6
5 5 6 6 6
10 2 4 5 8 9 7 10 6 64 1
4 5 8 9 10 10 64 64 0
10 6 3 2 7 1 0 9 8 5 10
7 7 7 9 9 9 10 10 10
*/
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n = 0;
cin >> n;
int data[n] = {0};
int result[n-1] = {0};
int i = 0;
for(i = 0; i < n; i++)
{
cin >> data[i];
}
vector<int> num; //作為棧儲存資料
vector <int> index; //儲存棧中資料在原始序列中的位置
i = 0; // 初始化為 0,向棧壓入第一個資料
while (1)
{
if (int(num.size()) == 0)
{
// 棧為空,並且比較到最後一個數據,迴圈結束
if (i == n-1)
{
cout << "exit2" << endl;
break;
}
// 棧為空,壓入新的資料
num.push_back(data[i]);
index.push_back(i);
i++;
}
// 每次拿當前資料與棧頂元素比較,
// 若當前資料小於等於棧頂資料,繼續壓棧
int len = int(num.size() - 1);
while (num[len] >= data[i])
{
// 比較到最後一個數據仍然比棧頂小,大迴圈結束
if (i == n - 1)
{
cout << "exit1" << endl;
goto END;
}
num.push_back(data[i]);
index.push_back(i);
i++;
len = int(num.size() - 1);
}
// 若當前資料大於棧頂資料,當前資料即為棧頂資料後面
// 第一個比它大的數,然後彈出棧頂資料,進行下一輪比較
result[index[len]] = data[i];
num.pop_back();
index.pop_back();
}
END:for(i = 0; i < n-1; i++)
{
cout << result[i] << " ";
}
return 0;
}
個人見解,如有錯誤,歡迎指正與交流!
獲取更多精彩,請關注「seniusen」!