头条完整试题,1,2ac代码,求3-5ac代码(java)

8/12日头条笔试,整理收集得1-5完整试题。
下为ac的1,2两题完整java代码,求大佬ac的3-5题代码。谢谢。~


1. 一个球场C的球迷看台可容纳M*N个球迷。官方想统计一共有多少球迷群体,最大的球迷群体有多少人。
球迷选座特性:1.
1.同球迷群体会选择相邻座位,不同球迷群体选择不相邻的座位。(相邻包括前后相邻、左右相邻、斜对角相邻);
2.给定一个M*N的二位球场,0代表该位置没人,1代表该位置有人,希望输出球队群体个数P,最大的球队群体人数Q。
输入:
第一行,2个数字,M  N,使用英文逗号隔开
接下来M行,每行N个数字,使用英文逗号隔开
输出:
一行 ,2数字,P   Q
import java.util.Scanner;   public class no1 {     static boolean[][] flag;     static int[][] input;     static int Q = 0;     static int P = 0;     static int num = 0;     static int m;     static int n;     public static void main(String[] args) {         Scanner in = new Scanner(System.in);         String[] s = in.nextLine().split(",");         m = Integer.parseInt(s[0]);         n = Integer.parseInt(s[1]);         input = new int[m][n];         flag = new boolean[m][n];         for(int i = 0; i < m; i++){             String[] inputtemp = in.nextLine().split(",");             for(int j = 0; j < n; j++){                 input[i][j] = Integer.parseInt(inputtemp[j]);             }         }         in.close();                  for(int i = 0; i < m; i++){             for(int j = 0; j < n; j++){                 P += find(i, j);             }         }         System.out.println(P +","+ Q);                       }     public static int find(int i,int j){         if(input[i][j] == 1 && !flag[i][j]){             flag[i][j] = true;             num ++;                          if(i != m - 1 && input[i+1][j] == 1 && !flag[i+1][j]){                 find(i+1, j);             }             if(i != 0 && input[i-1][j] == 1 && !flag[i-1][j]){                 find(i-1, j);             }                          if(j != n-1 && input[i][j+1] == 1 && !flag[i][j+1]){                 find(i, j+1);             }             if(j != 0 && input[i][j-1] == 1 && !flag[i][j-1]){                 find(i, j-1);             }                          if(i != 0 && j != 0 && input[i-1][j-1] == 1 && !flag[i-1][j-1]){                 find(i-1, j-1);             }             if(i != 0 && j != n-1 && input[i-1][j+1] == 1 && !flag[i-1][j+1]){                 find(i-1, j+1);             }             if(i != m-1 && j != n-1 && input[i+1][j+1] == 1 && !flag[i+1][j+1]){                 find(i+1, j+1);             }             if(i != m-1 && j != 0 && input[i+1][j-1] == 1 && !flag[i+1][j-1]){                 find(i+1, j-1);             };         }else{                 if(Q < num)                     Q = num;                 num = 0;                 flag[i][j] = true;                 return 0;             }         return 1;                                                }     }
2. 文章病句标识 题目描述:     为了提高文章质量,每一篇文章(假设全部都是英文)都会有m名编辑审核,每个编辑独立工作,会把觉得有问题的句子通过下标记录下来,比如[1,10],1表示病句的第一个字符,10表示病句的最后一个字符。也就是从1到10个字符组成的句子,是有问题的。     现在需要把多名编辑有问题的句子合并起来,送给总编辑进行最终的审核。比如编辑a指出的病句是[1,10],[32,45];b编辑指出的病句是[5,16],[78,94],那么[1,10]和[5,16]是有交叉的,可以合并成[1,16],[32,45],78,94] 输入描述:     编辑数量m,之后每行是每个编辑的标记的下标集合,第一个和最后一个下标用英文逗号分隔,每组下标之间用分号分隔 输出描述:     合并后的下标集合,第一个和最后一个下标用英文逗号分隔,每组下标之间用分号分隔。返回结果是从小到大的递增排列。 输入:
3
1,10;32,45
78,94;5,16
80,100;200,220;16,32
输出:
1,45;78,100;00,220
/*  *  自己写一个数据结构,然后对这个数据结构排序.  */   import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Scanner;   public class no2 {     public static void main(String[] args) {         Scanner in = new Scanner(System.in);         int m = Integer.parseInt(in.nextLine());         ArrayList<Interval> input = new ArrayList<>();                  for(int i = 0; i < m; i++){             String[] errorsClassifiedByEditors = in.nextLine().split(";");             for(int j = 0; j < errorsClassifiedByEditors.length; j++){                 String[] errors = errorsClassifiedByEditors[j].split(",");                 input.add(new Interval(Integer.parseInt(errors[0]), Integer.parseInt(errors[1])));             }         }         in.close();                  Collections.sort(input,new Comparator<Interval>(){
public int compare(Interval o1, Interval o2) {                     return o1.start - o2.start;                 }             });                  Interval prev = null;         ArrayList<Interval> results = new ArrayList<>();         for(Interval item : input){             if(prev == null || item.start > prev.end){                 results.add(item);                 prev = item;             }else if(prev.end < item.end){                 prev.end = item.end;             }         }               int count = 0;         for(Interval item : results){             if(count == results.size() - 1){                 System.out.print(item.start + "," + item.end);             }else{                 System.out.print(item.start + "," + item.end + ";");             }             count ++;         }                       }   }   class Interval{     int start;     int end;          public Interval(int start, int end){         this.start = start;         this.end = end;     } }
3. 小a和小b玩一个游戏,有n张卡牌,每张上面有两个正整数x,y。 取一张牌时,个人积分增加x,团队积分增加y。 求小a,小b各取若干张牌,使得他们的个人积分相等。 输入描述: 第一行n 接下来n行,每行两个整数x,y 输出描述: 一行一个整数 表示小a的积分和小b的积分相等的时候,团队积分的最大值。 输入: 4 3 1 2 2 1 4 1 4 输出 10 数据范围: 0 < n < 100 0 < x < 1000 0 < y < 1e6
4.两个长度为n的序列a,b 问有多少个区间[l,r]满足 max(a[l,r]) < min(b[l,r]) 即a区间的最大值小于b区间的最小值 数据范围: n < 1e5 ai,bi < 1e9 输入描述: 第一行一个整数n 第二行n个数,第i个为ai 第三行n个数,第i个为bi 0 <= l <= r < n 输出描述: 一行一个整数,表示答案 输入: 3 3 2 1 3 3 3 输出: 3
5. 小明在抖音关注了n个主播,每个主播每天的开播时间是固定的,分别在时刻开始,ti时刻结束。小明无法同时看两个直播。一天被分为m个时间单位。请问小明每天最多能完整观看多少个直播? 输入描述: 第一行一个整数,代表n 第二行一个整数,代表m 第三行空格分隔n*2个整数,代表s,t 输出描述: 一行一个整数,表示答案 输入: 3  10 0 3 3 7 7 0 输出 3 数据范围: 1 <= n <= 10^5 2 <= m <= 10^6 0 <= si,ti < m

#笔试题目##字节跳动#
全部评论
https://www.jianshu.com/p/83204e62ac94
点赞 回复
分享
发布于 2018-08-16 21:54
/*这谁把坟贴都挖出来了正好看到就写一下了,求个能交题的地址,我不知道写的对不对 以下是代码 */ // 第三题是个01背包 ,我应该写不出来 朋友一眼秒的 #include<bits/stdc++.h> using namespace std; typedef long long ll; int x[110],y[110]; unordered_map<int,ll> mp[2]; int main(){     int n;cin>>n;     for(int i=1;i<=n;i++) cin>>x[i]>>y[i];     mp[0][0]=0;     for(int i=1;i<=n;i++){         int now=i%2;         mp[now].clear();         for(auto j=mp[1-now].begin();j!=mp[1-now].end();++j){             mp[now][j->first+x[i]]=max(mp[now][j->first+x[i]],j->second+y[i]);             mp[now][j->first-x[i]]=max(mp[now][j->first-x[i]],j->second+y[i]);             mp[now][j->first]=max(mp[now][j->first],j->second);         }     }     cout<<max(mp[0][0],mp[1][0])<<endl;     return 0; } // 第四题比较简单 栈的经典操作 我们预处理a数组 以ai为最大值的 左右区间长度 l[i],r[i] b数组 以bi 为最小值的左右区间长度 L[i],R[i] 最后遍历一下数组 复杂度O(n)? #include<bits/stdc++.h> using namespace std; #define maxn 100005 int a[maxn],b[maxn]; int l[maxn],r[maxn],L[maxn],R[maxn]; int st[maxn],n,len; void init1(int c[]){   memset(st,0,sizeof(st));   len=0;   for(int j=1;j<=n;j++){      while(c[st[len]]<c[j]&&len>0) len--;      if(len==0) l[j]=1;      else l[j]=st[len]+1;      st[++len]=j;   }   len=0;   for(int j=n;j>=1;j--){      while(c[st[len]]<c[j]&&len>0) len--;      if(len==0) r[j]=n;      else r[j]=st[len]-1;      st[++len]=j;   } } void init2(int c[]){   memset(st,0,sizeof(st));   len=0;   for(int j=1;j<=n;j++){      while(c[st[len]]>c[j]&&len>0) len--;      if(len==0) L[j]=1;      else L[j]=st[len]+1;      st[++len]=j;   }   len=0;   for(int j=n;j>=1;j--){      while(c[st[len]]>c[j]&&len>0) len--;      if(len==0) R[j]=n;      else R[j]=st[len]-1;      st[++len]=j;   } } int main(){   cin>>n;   for(int j=1;j<=n;j++){     scanf("%d",&a[j]);   }   for(int j=1;j<=n;j++){     scanf("%d",&b[j]);   }   init1(a);   init2(b);   int ans=0;   for(int j=1;j<=n;j++){      int mi=min(R[j],r[j]);      int mx=max(l[j],L[j]);      ans+=mi-mx+1;   }   printf("%d\n",ans); } // 第五题 就是个经典的贪心问题 #include<bits/stdc++.h> using namespace std; #define pii pair<int,int> vector<pii>q; bool cmp(pii a,pii b){   if(a.first==b.first) return a.second<b.second;   return a.first<b.first; } int main(){    int n,m;    scanf("%d%d",&n,&m);    for(int j=1;j<=n;j++){        int s,t;        scanf("%d%d",&s,&t);        q.push_back(pii(s,t));    }    sort(q.begin(),q.end(),cmp);    int ans=1,en=q[0].second;    if(en>m) ans--;    for(int j=1;j<n;j++){       if(q[j].second>m) break;       if(q[j].first>=en) ans++,en=q[j].second;    }    printf("%d\n",ans); }
点赞 回复
分享
发布于 2019-01-06 20:38
滴滴
校招火热招聘中
官网直投
妹子好强
点赞 回复
分享
发布于 2018-08-13 13:18
楼主第二题你的逗号和分号都是中文的,题目中应该是英文的吧。
点赞 回复
分享
发布于 2018-08-13 16:48
……西电?这么厉害
点赞 回复
分享
发布于 2018-08-14 10:05
import java.util.Scanner; /**  * @author cwz  * @date 2018-08-help2  */ public class help2 {     public static void main(String[] args){         final int OFFSET = 100000;         int[][] dp = new int[101][200001];         int[][] totalValue = new int[101][200001];         int[][] buf = new int[101][2];         Scanner sc = new Scanner(System.in);         int n = sc.nextInt();         for(int i=1; i<=n; i++){             int x = sc.nextInt();             int y = sc.nextInt();             buf[i][0] = x;             buf[i][1] = y;         }         for(int i=-100000; i<=100000; i++){             dp[0][i+OFFSET] = Integer.MIN_VALUE;             totalValue[0][i+OFFSET] = Integer.MIN_VALUE;         }         dp[0][0+OFFSET] = 0;         totalValue[0][0+OFFSET]=0;         for(int i=1;i<=n;i++){             for(int j=-100000; j<=100000; j++){                 int tmp1 = Integer.MIN_VALUE, tmp2 = Integer.MIN_VALUE;                 if(j+buf[i][0] <= 100000 && dp[i-1][j+buf[i][0]+OFFSET]!=Integer.MIN_VALUE){                     tmp1 = totalValue[i-1][j+buf[i][0]+OFFSET] + buf[i][1];                 }                 if(j-buf[i][0] >= -100000 && dp[i-1][j-buf[i][0]+OFFSET]!=Integer.MIN_VALUE){                     tmp2 = totalValue[i-1][j-buf[i][0]+OFFSET] + buf[i][1];                 }                 if(tmp1 < tmp2) tmp1 = tmp2;                 if(tmp1 < totalValue[i-1][j+OFFSET]) tmp1 = totalValue[i-1][j+OFFSET];                 totalValue[i][j+OFFSET] = tmp1;             }         }         System.out.println(totalValue[n][0+OFFSET]);     } }
点赞 回复
分享
发布于 2018-08-14 23:45
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Scanner; class program{     public int startTime;     public int endTime;     public program(int startTime, int endTime){         this.startTime = startTime;         this.endTime = endTime;     } } public class help5 {     public static void main(String[] args){         Scanner scanner = new Scanner(System.in);         int n = scanner.nextInt();         int m = scanner.nextInt();         ArrayList<program> list = new ArrayList<program>();         for(int i=0; i<n; i++){             int startTime = scanner.nextInt();             int endTime = scanner.nextInt();             if(startTime>endTime) endTime=m;             program p = new program(startTime, endTime);             list.add(p);         }         Comparator c = new Comparator<program>() {             public int compare(program o1, program o2) {                 if(o1.endTime<o2.endTime) return -1;                 else return 1;             }         };         Collections.sort(list, c);         int ans = 0, currentTime=0;         for(int i=0;i<list.size();i++)         {             if(currentTime<=list.get(i).startTime){                 currentTime = list.get(i).endTime;                 ans++;             }         }         System.out.println(ans);     } }
点赞 回复
分享
发布于 2018-08-14 23:46
都是比较基础的几类常用算法题目 1 . 图 的dfs 或者并查集  可以解决  3. 标准的动态规划之背包问题变种  5. 贪心 算法 
点赞 回复
分享
发布于 2018-10-20 18:20
//想问这个是上机还是笔试手写校招的题目呀。第四题。 class Solution{     public void me(int[] a,int[]b)     {         Stack<Integer>stack=new Stack<>();         int len=a.length;         int maxa=Integer.MIN_VALUE;         int minb=Integer.MAX_VALUE;         for(int i=0;i<len;i++)         {             if(a[i]>maxa)maxa=a[i];             if(b[i]<minb)minb=b[i];             if(maxa<minb) {stack.push(i);continue;}                          if(a[i]<b[i]) {                 maxa=a[i];                 minb=b[i];                 stack.push(-1);                 stack.push(i);                 //System.out.print(stack.peek()+" ");                 continue;             }             else {                 maxa=Integer.MIN_VALUE;                 minb=Integer.MAX_VALUE;                 stack.push(-1);                 //压栈完毕             }         }         int count=1;         int sum=0;                  while(!stack.isEmpty())         {             int pre=stack.pop();//判定连续             if(!stack.isEmpty())             {             if(stack.peek()!=-1)             {                 count++;continue;             }             else {                 stack.pop();                 sum+=count*(count+1)/2;                 count=1;continue;             }             }                              sum+=count*(count+1)/2;                      }         System.out.print(sum);     } }
点赞 回复
分享
发布于 2018-12-12 22:42
//第五题今天被考到了,完全没思路,话说现在互联网面试都需要机试了吗
点赞 回复
分享
发布于 2019-01-06 14:52

相关推荐

头像
不愿透露姓名的神秘牛友
03-13 14:57
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务