头条笔试五道编程题

发下头条的笔试题目,给大家笔试后练习。
第一题:

第二题:


第三题:

第四题:

第五题:

#笔试题目##字节跳动#
全部评论
题目过几天应该会放出来给大家练习
点赞 回复 分享
发布于 2018-08-25 12:16
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() {          int a,b;     scanf("%d%d", &a, &b);     vector<int> ans(a, 0),tmp(a,1);     for (int i = 0;i<a;i++)     {         scanf("%d", &ans[i]);     }     for (int i = 1;i<a;i++)     {         for (int j = 0;j<i;j++)         {             if (ans[i]>=ans[j])             {                 tmp[i] = max(tmp[i], tmp[j] + 1);             }         }     }     cout << *max_element(tmp.begin(), tmp.end())+b-1; } //第四题答案,刚才转念一想,做复杂了。因为是重复的序列,我本来是在全局序列之中求最长上升子序列 其实只需在第一个序列之中求最长上升序列,并且其中的最大元素在后面的每个序列之中一定存在,顾加上 b-1。
点赞 回复 分享
发布于 2018-08-25 19:31
#include <iostream> using namespace std; const int mod = 1e9 + 7; int dp_1[10000],dp_2[10000]; int main() {     int n;     cin >> n;     dp_1[0] = 10;     for (int i = 1;i<n;i++)     {         dp_1[i] = dp_1[i - 1] * 10;     }     dp_2[0] = dp_1[0];     dp_2[1] = dp_1[1];     for (int i = 2;i<n;i++)     {         dp_2[i] = (dp_1[i] + dp_2[i - 2])%mod;         for (int j = 1;j<n-1;i++)         {             dp_2[i] += (dp_2[j] * dp_2[i - j - 1])%mod;         }         dp_2[i] %= mod;     }     cout << dp_2[n - 1]; } 第二题答案。 不能检测了,不敢说对。但思想没毛病。dp_1表示只有字符的情况。dp_2[i]要加上dp_2[i-2], 是考虑括号。最后的循环是考虑加号。
点赞 回复 分享
发布于 2018-08-25 14:40
https://www.jianshu.com/p/0b0f11b89982 第二题还是没什么思路
点赞 回复 分享
发布于 2018-08-28 14:26
这些题感觉非竞赛选手会做自闭的 ……
点赞 回复 分享
发布于 2018-08-27 00:11
//第一题 dfs import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class test1 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int num = scan.nextInt(); Queue<Integer>[] queue = (LinkedList<Integer>[]) new LinkedList[num+1]; for (int i = 1; i <= num; i++){ queue[i] = new LinkedList<>(); } for (int i = 1; i <= num; i++){ int k = scan.nextInt(); while (k != 0){ queue[i].add(k); queue[k].add(i); k = scan.nextInt(); } } boolean[] marked = new boolean[num+1]; //维护一个标记数组 int count = 0; for (int i = 1; i <= num; i++){ if (!marked[i]) { dfs(queue, marked, i); count++; } } System.out.println(count); } public static void dfs(Queue<Integer>[] queue, boolean[] marked, int v){ marked[v] = true; for (int w : queue[v]){ if (!marked[w]) { dfs(queue, marked, w); } } } }
点赞 回复 分享
发布于 2018-08-26 17:03
//第一题并查集思路,供参考 #include <stdio.h> #define N 100020 int friends[N];//每个人所属的连通分量,即构成朋友树时每个人的父节点 int rank[N];//连通分量的权值,即朋友树的大小 int res; void init(int n)//初始化initialization { for(int i=0;i<n;i++) { friends[i]=i; rank[i]=0; } } int findRoot(int x)//寻找x所属的朋友树的根节点 { //一直向上遍历寻找根节点 while(x != friends[x]) x = friends[x]; return x; } void connect(int x,int y) { int xRoot = findRoot(x); int yRoot = findRoot(y); if(xRoot == yRoot) return ; //判断树高,小树并在大树下 if(rank[xRoot] < rank[yRoot]) friends[xRoot]=yRoot; else { friends[yRoot] = xRoot; if(rank[xRoot]==rank[yRoot])//两树高相等,合并后树高+1 rank[xRoot]++; } --res; } int main() { int n; init(N);//初始化 scanf("%d",&n); res = n; for(int i=1;i<=n;i++){ int t; while(~scanf("%d",&t)){ if(t == 0) break; connect(i,t); } } printf("%d",res); return 0; }
点赞 回复 分享
发布于 2018-08-26 14:08
//第一题DFS思路,空间还能优化,没提交,不知道对不对 #include <iostream> #include <vector> using namespace std; int n; int res; void dfs(vector<vector<int>>& friends, int x, int y,vector<vector<bool>>& mark){ if(x >= friends.size() || y >= friends[0].size() || x < 0 || y < 0) return; if(mark[x][y] == true) return; if(friends[x][y] == 0){ mark[x][y] = true; return; } // 对于已经搜索过的点要进行标记 mark[x][y] = true; res--; for(int j=1; j<n; j++){ dfs(friends, x, j, mark); } } void minM(vector<vector<int>>& friends) { if(friends.empty()) return; res = n; vector<vector<bool>> vecMark(friends.size(),vector<bool>(friends[0].size(),false));// 定义标记数组 //开始搜索 for(int i = 1;i < friends.size();i++){ for(int j = 1;j < friends[0].size();j++){ if(vecMark[i][j] == true) continue; if(friends[i][j] == 0){ vecMark[i][j] = true; continue; } dfs(friends, i, j, vecMark); } } cout << num << endl; } int main() { cin >> n; vector<vector<int>> friends(n+1, vector<int>(n+1,0)); int temp = 0; for(int i=1; i<=n; i++){ int j = 1; while(cin>>temp){ if(temp == 0) break; friends[i][j] = temp; j++; } } minM(friends); return 0; }
点赞 回复 分享
发布于 2018-08-26 14:07
太难了
点赞 回复 分享
发布于 2018-08-25 12:57
第五题我看输出格式就没有做的动力了。
点赞 回复 分享
发布于 2018-08-25 12:52
我也截图留下来了 两次都有(笑哭)
点赞 回复 分享
发布于 2018-08-25 12:39
坐等答案。
点赞 回复 分享
发布于 2018-08-25 12:25
坐等答案!!
点赞 回复 分享
发布于 2018-08-25 12:20
等答案+1
点赞 回复 分享
发布于 2018-08-25 12:19
第三题读取一直有问题...最后没有回车怎么解决
点赞 回复 分享
发布于 2018-08-25 12:16
等答案
点赞 回复 分享
发布于 2018-08-25 12:16
第一题不是bfs么?各种超时
点赞 回复 分享
发布于 2018-08-25 12:15
等答案
点赞 回复 分享
发布于 2018-08-25 12:14
抢沙发,等解答
点赞 回复 分享
发布于 2018-08-25 12:11

相关推荐

27届毕业,最近想找一段大厂实习,感觉简历有些问题,好多都不给面,求大佬们指点,最近好焦虑
重生之我学Java干...:我从后端的角度分析一下你的第一个项目,我感觉亮点不是很突出。因为我是因为组内有需求,临时上手学react干活。我用到的技术基本就cover你那个智慧园区管理平台的很多亮点了。那作为比较专业的前端,你上述的内容是不是有点单薄呢。感觉还得包装
点赞 评论 收藏
分享
10-23 16:33
门头沟学院 Java
本人某中9本科,成绩中等,目前没科研没实习,目前后端学到了javaWeb,开始没定好方向,在学国外课程,走工程路线起步有点晚了,到这个时间点了还在学JavaWeb,顿感迷茫,不知道是坚持走下去还是寒假去准备考研。考研这个路弄得我还是心痒痒的,因为从众考研的人也不在少数,所以会有这方面的心理安慰吧,就是“不行我可以去考研啊”,而且意味着三年的缓冲,为了复试还有积攒经验美化简历,其实现在也可以去申入实验室打杂;就业可能意味着多些工作经验,工程岗应该到后面还是经验大于学历?还是有点迷茫了,求助好心人有无路线启发
千千倩倩:同27给点建议,现在这个时间点可以快速看完外卖和点评,不用跟着敲,但一定要在看的时候总结每个部分的整个业务流程,对其中的实现有一个大概的印象。然后直接开始看八股,刷算法。八股和算法最好还是在项目学习中穿插着看。如果计算机基础,算法这些基础好,加上每天刻苦学习,两周可以达到勉强能面试的水平,到时候就直接海投中小厂,在约面和面试的过程中不断巩固知识。没找到实习也没关系,就当积累经验。再沉淀一波直接明年三月开始投暑期,毕竟是9本,总是有面试机会的,只要你这三个月不懈怠,面试发挥得一定不错,只要拿到一个中,大厂暑期实习,秋招就有竞争力了。总得而言,现在还有机会,但是时间非常紧张,需要你结合自己情况考虑,共勉
你会选择考研还是直接就业
点赞 评论 收藏
分享
09-12 11:55
已编辑
湖南工商大学 Java
那一天的Java_J...:这种一堆问题的,别去
点赞 评论 收藏
分享
评论
点赞
148
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务