米哈游居然两个都a了,太难得了

其实写的挺乱的😂

第二题 就是类似与消消乐的一道题
import java.util.Scanner;

public class Main{
    private static int rows, cols;

    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        String[] firstLine = scanner.nextLine().split(" ");
        rows = Integer.parseInt(firstLine[0]);
        cols = Integer.parseInt(firstLine[1]);
        char[][] canvas = new char[rows][cols];
        for(int i = 0; i < rows; i++){
            String line = scanner.nextLine();
            for(int j = 0; j < cols; j++){
                canvas[i][j] = line.charAt(j);
            }
        }

        {
            String[] lastLine = scanner.nextLine().split(" ");
            int r1 = Integer.parseInt(lastLine[0]);
            int c1 = Integer.parseInt(lastLine[1]);
            int r2 = Integer.parseInt(lastLine[2]);
            int c2 = Integer.parseInt(lastLine[3]);

            char temp = canvas[r1][c1];
            canvas[r1][c1] = canvas[r2][c2];
            canvas[r2][c2] = temp;
        }


        scanner.close();

        int count = 0;
        while (true) {
            boolean[][] mark = new boolean[rows][cols];
            markRow(canvas, mark);
            markCol(canvas, mark);

            boolean flag = false;
            for (int i = 0; i < rows; i++) {
                for (int j = 0; j < cols; j++) {
                    if (mark[i][j]) {
                        count += 1;
                        canvas[i][j] = '0';
                        flag = true;
                    }
                }
            }

            if(!flag || !fallDown(canvas))
                break;
        }
        System.out.println(count);

    }

    private static boolean fallDown(char[][] canvas){
        boolean flag = false;
        for(int j = 0; j < cols; j++){
            int zero = -1;
            int alpha = -1;
            for(int i = rows - 1; i >= 0; i--){
                if(zero == -1 && canvas[i][j] == '0')
                    zero = i;
                if(alpha == -1 && canvas[i][j] != '0')
                    alpha = i;
            }

            if(zero == -1 || alpha == -1 || zero <= alpha)
                continue;

            flag = true;
            int dis = zero - alpha;
            for(int i = alpha; i >= 0; i--){
                canvas[i + dis][j] = canvas[i][j];
                canvas[i][j] = '0';
            }
        }
        return flag;
    }


    private static void markRow(char[][] canvas, boolean[][] mark){
        for(int i = 0; i < rows; i++) {
            char last = '!';
            int count = 0;
            for(int j = 0; j < cols; j++){
                char curr = canvas[i][j];
                if(curr == '0'){
                    count = 0;
                    continue;
                }
                if(curr == last){
                    count += 1;
                } else{
                    if(count >= 3){
                        markRow(i, j - 1, count, mark);
                    }
                    last = curr;
                    count = 1;
                }
            }
            if(count >= 3)
                markRow(i, cols - 1, count, mark);
        }
    }

    private static void markCol(char[][] canvas, boolean[][] mark){
        for(int j = 0; j < cols; j++) {
            char last = '!';
            int count = 0;
            for(int i = 0; i < rows; i++){
                char curr = canvas[i][j];
                if(curr == '0'){
                    count = 0;
                    continue;
                }
                if(curr == last){
                    count += 1;
                } else{
                    if(count >= 3){
                        markCol(j, i - 1, count, mark);
                    }
                    last = curr;
                    count = 1;
                }
            }
            if(count >= 3)
                markCol(j, rows - 1, count, mark);
        }
    }

    private static void markRow(int row, int end, int count, boolean[][] mark){
        for(int j = end; j > end - count; j--){
            mark[row][j] = true;
        }
    }

    private static void markCol(int col, int end, int count, boolean[][] mark){
        for(int i = end; i > end - count; i--){
            mark[i][col] = true;
        }
    }
}

第一题 字符串
import javafx.util.Pair;

import java.util.HashMap;
import java.util.Scanner;

public class Main {
    private static HashMap<Character, Integer> hashMap = new HashMap<>();
    private static String dictionary = "";

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String text = scanner.nextLine();
        scanner.close();

        initDictionary();

        String result = getString(text, 1);
//        System.out.println(result);
        System.out.println(getMostAlpha(result));
    }

    private static void initDictionary() {
        StringBuilder stringBuilder = new StringBuilder();

        int index = 0;
        for (char i = 'A'; i <= 'Z'; i++) {
            hashMap.put(i, index++);
            stringBuilder.append(i);
        }

        for (char i = 'a'; i <= 'z'; i++) {
            hashMap.put(i, index++);
            stringBuilder.append(i);
        }

        dictionary = stringBuilder.toString();
    }

    private static String getMostAlpha(String text){
        text = text.toLowerCase();

        int max = 0;
        char maxAlpha = '!';
        HashMap<Character, Integer> map = new HashMap<>();
        for(int i = 0; i < text.length(); i++){
            char ch = text.charAt(i);
            if(map.containsKey(ch))
                map.put(ch, map.get(ch) + 1);
            else
                map.put(ch, 1);
            if(map.get(ch) > max) {
                max = map.get(ch);
                maxAlpha = ch;
            }
        }

        return String.valueOf(maxAlpha) + max;
    }

    private static String getString(String text, int count) {
        StringBuilder result = new StringBuilder();
        StringBuilder last = new StringBuilder();
        int index = 0;
        while (index < text.length()) {
            char curr = text.charAt(index);
            if (curr >= '0' && curr <= '9') {
                int start = index++;
                while (index < text.length() && text.charAt(index) >= '0' && text.charAt(index) <= '9') {
                    index++;
                }
                int number = Integer.parseInt(text.substring(start, index)) - 1;
                for(int i = 0; i < number; i++){
                    result.append(last.toString());
                }
                last.delete(0, last.length());
            } else if (index < text.length() - 2 && text.charAt(index + 1) == '-') {
                int start = hashMap.get(curr);
                int end = hashMap.get(text.charAt(index + 2));
                result.append(dictionary.substring(start, end + 1));
                last.append(dictionary.substring(start, end + 1));
                index += 3;
            } else {
                result.append(curr);
                last.append(curr);
                index += 1;
            }
        }
        String s = "";
        for (int i = 0; i < count; i++) {
            s += result.toString();
        }
        return s;
    }
}

真的不强
牛友回我tql 我都觉得自己要飘了😂
运气好,手感好而已
迄今0offer😂
每天坚持来牛客许愿



#笔试题目##米哈游#
全部评论
你这两个题总共写了近250行代码啊,厉害了
点赞 回复 分享
发布于 2019-09-12 21:31
666大佬大佬
点赞 回复 分享
发布于 2019-09-07 20:51
哥 你真猛
点赞 回复 分享
发布于 2019-09-07 20:48
大佬
点赞 回复 分享
发布于 2019-09-07 20:31
TDL!!
点赞 回复 分享
发布于 2019-09-07 20:26
太强了
点赞 回复 分享
发布于 2019-09-07 20:26
老哥tql
点赞 回复 分享
发布于 2019-09-07 20:26

相关推荐

06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 14:18
点赞 评论 收藏
分享
评论
6
11
分享

创作者周榜

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