头条完整试题,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 Qimport 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,之后每行是每个编辑的标记的下标集合,第一个和最后一个下标用英文逗号分隔,每组下标之间用分号分隔 输出描述: 合并后的下标集合,第一个和最后一个下标用英文逗号分隔,每组下标之间用分号分隔。返回结果是从小到大的递增排列。 输入:31,10;32,4578,94;5,1680,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 < 1e64.两个长度为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 输出: 35. 小明在抖音关注了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
#笔试题目##字节跳动#