今日头条2018.8.12笔试题总结

 今日头条笔试题1(经典的floodfill问题):

具体可以参考leetcode 200题:Number of Islands

1. 一个球场C的球迷看台可容纳M*N个球迷。官方想统计一共有多少球迷群体,最大的球迷群体有多少人。

球迷选座特性:1.

1.同球迷群体会选择相邻座位,不同球迷群体选择不相邻的座位。(相邻包括前后相邻、左右相邻、斜对角相邻);

2.给定一个M*N的二位球场,0代表该位置没人,1代表该位置有人,希望输出球队群体个数P,最大的球队群体人数Q。

输入:

第一行,2个数字,M  N,使用英文逗号隔开

接下来M行,每行N个数字,使用英文逗号隔开

输出:

一行 ,2数字,P   Q

今日头条2018.8.12笔试题总结_第1张图片

package com.casm.test;

import java.util.Scanner;

/**
 * @author yangyang
 * 2018年8月14日上午10:26:36
 * 此题是2018年8.12 今日头条的笔试题第一题:该问题是经典的floodfill问题
 * 具体可以参考leetcode 200题:Number of Islands
 */

public class Main {
	//定义一个8*2的二维数组 记录八个方向
	static int[][] d=new int[][] {{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};
	//定义全局变量 记录临时的最大球迷数
	static int temp=0;
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String[] mn=in.nextLine().split(",");
		int m=Integer.parseInt(mn[0]);
		int n=Integer.parseInt(mn[1]);
		//二维数组
		int[][] nums=new int[m][n];
		for(int i=0;i=0&&x=0&&y

今日头条笔试第二题:

今日头条2018.8.12笔试题总结_第2张图片

考点:区间合并(关于区间合并问题请参考我的另一篇博客https://blog.csdn.net/ustcyy91/article/details/81669176
 * 类似:参考leetcode56. Merge Intervals

合并区间关键在于寻找是否存在前一个区间的结束值大于后一个区间的开始值,若存在,则这两个区间就可以合并。理解这个并不难,但对数据的处理有一个小技巧,就是将所有区间的开始值和结束值都排好序,这样在合并区间的时候会更简单一些,这也是区间问题常用的套路,排序过后就是合并过程了,具体过程看代码吧。

package com.casm.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

/**
 * @author yangyang
 *
 * 2018年8月14日下午1:54:39
 * 今日头条笔试题 第二题
 * 考点:区间合并
 * 类似:参考leetcode56. Merge Intervals
 */
public class MergeInteval {

	public static void main(String[] args) {
		ArrayList list=new ArrayList<>();
		Scanner sc=new Scanner(System.in);
		int n=Integer.parseInt(sc.nextLine());
		for(int i=0;iends[i]){
                list.add(new Interval(starts[j],ends[i]));
                j=i+1;
            }
	}
		for(int i=0;i

第四题:

今日头条2018.8.12笔试题总结_第3张图片

暴力搜索:时间复杂度O(N*N) 可以优化

package com.casm.test;

import java.util.Scanner;

public class JRTT3 {

	public static void main(String[] args) {
		int res=0;
		Scanner sc=new Scanner(System.in);
		int n=Integer.parseInt(sc.nextLine());
		int[] a=new int[n];
		int[] b=new int[n];
		String[] sa=sc.nextLine().split(" ");
		String[] sb=sc.nextLine().split(" ");
		for(int i=0;i

第五题:

你可能感兴趣的:(面试题,牛客网刷题之JAVA,数据结构,算法)