360企业安全2019暑期实习算法岗笔试
目錄
- 選擇題
- 編程題
- 第一題
- 題意
- 思路
- 代碼
- 第二題
- 題意
- 思路
- 代碼
? ? ? ?360好像之前有一輪筆試面試,不過我沒投,錯過了。前幾天投的,今天(2019.4.24)晚上7點筆試,共90分鐘,20個選擇題(60分),2道編程題(40分),記錄一下筆試的心得吧。
? ? ? ?前段時間菜雞博主經歷了很多筆試面試(騰訊正式批、阿里、京東等),也沒拿到啥offer,沒有太多時間寫筆試面試心得。過段時間會整理一下發出來。
選擇題
? ? ? ?選擇題我就寫一些我目前還記住的吧。
? ? ? ?1.按行存儲,計算三維數組num[i][j][k]的地址。
? ? ? ?2.給出如下代碼,問時間復雜度的下界,博主選的O(logn)O(logn)O(logn)。
? ? ? ?3.漢諾塔7個盤子,多少步數。算一下就行了,答案我忘了。
? ? ? ?4.一個六面骰子,一個面是1,兩個面是2,三個面是3,平均擲多少次能使1、2、3各出現一次。博主選的7.3,全排列算一下就行了,沒多少種情況。
? ? ? ?5.廣義表(a,b,(c,d))的表尾是什么,博主選的(b,(c,d))。
? ? ? ?6.給出兩個樣本集X、Y,計算協方差。
? ? ? ?7.給出正樣例和負樣例,計算間隔最大的最優分離超平面。
? ? ? ?8.線性規劃問題,在下列選項中選出不對的一項。選項大概是可行域,非空,無界啥的,具體的忘了。
編程題
第一題
題意
? ? ? ?有一些不同顏色的氣球,他們的個數不同,我們要把這些氣球放在不同的盒子里,每個盒子中的氣球顏色必須相同,且每個盒子最少放兩個氣球,且每個盒子的氣球顏色個數相同。問最少需要幾個盒子。
思路
? ? ? ?求一下這些氣球個數的最大公約數,每個盒子都放這些氣球即可。以下為AC代碼。
代碼
#include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<algorithm> #include<iostream> #include<queue> #include<stack> #include<map> #include<vector> #include<string>using namespace std;int vis[100000+5]; int cnt[100000+5];int _gcd(int a, int b) {return b?_gcd(b,a%b):a; }int main() {int n;while(scanf("%d",&n)!=EOF){memset(vis,0,sizeof(vis));int ball_num = 0;int max_ball = -1;for(int i=1;i<=n;++i){int tmp;scanf("%d",&tmp);if(vis[tmp] == 0)ball_num ++ ;vis[tmp]++;max_ball = max(max_ball, tmp);}memset(cnt,0,sizeof(cnt));int ii = 0;for(int i=1;i<=max_ball;++i){if(vis[i] != 0){cnt[ii] = vis[i];ii++;}}sort(cnt, cnt+ball_num);if(ball_num == 1)printf("1\n");else{int tmp = cnt[0];for(int i=1;i<ball_num;++i){int a = tmp;int b = cnt[i];tmp = _gcd(a, b);if(tmp == 1)break;}if(tmp == 1)printf("0\n");else{int ans = 0;for(int i=0;i<ball_num;++i)ans += (cnt[i]/tmp);printf("%d\n",ans);}}}return 0; }第二題
題意
? ? ? ?求矩陣的最長上升序列的長度。
思路
? ? ? ?題意里沒說四方向還是八方向,我按照四方向做的。dfs+記憶化,以矩陣中的每個點當做起點做dfs,尋找最長上升序列,最后輸出最長的就行了。以下為AC代碼。
代碼
#include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<algorithm> #include<iostream> #include<queue> #include<stack> #include<map> #include<vector> #include<string>using namespace std;int m,n; int dirx[5]={0,-1,0,1}; int diry[5]={-1,0,1,0};int dfs(vector<vector<int> > &num, vector<vector<int> > &dp, int si, int sj) {if(dp[si][sj])return dp[si][sj];int ans = 1;for(int i=0;i<4;++i){int x = si + dirx[i];int y = sj + diry[i];if(x<0 || x>=m || y<0 || y>=n || num[x][y]<=num[si][sj])continue;int len = dfs(num, dp, x, y) + 1;ans = max(ans, len);}dp[si][sj] = ans;return ans; }int main() {while(scanf("%d %d",&m, &n)!=EOF){vector<vector<int> > num(m);for(int i=0; i<m; ++i){for(int j=0; j<n; ++j){int tmp;scanf("%d",&tmp);num[i].push_back(tmp);}} // for(int i=0;i<m;++i) // { // for(int j=0;j<n;++j) // cout<<num[i][j]; // cout<<endl; // }vector<vector<int> > dp(m, vector<int>(n,0));int ans = 1;for(int i=0; i<m; ++i)for(int j=0; j<n; ++j)ans = max(ans, dfs(num, dp, i, j));printf("%d\n",ans);}return 0; } 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的360企业安全2019暑期实习算法岗笔试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网易游戏2019暑期实习开发岗笔试题
- 下一篇: TensorRT学习笔记1 - 环境配置