米哈游笔试(4.3)

米哈游笔试(4.3 日 场)

选择题

我是个Java的,让我看指针(黑人问号)

编程题

第一题,是正则表达式的改编版(AC 80%)

    public boolean isMatch(String s, String p) {
        if(p.isEmpty()) return s.isEmpty();
        // 先判断我们的当前p第一个字符是不是(
        String temp = null;
        if(p.charAt(0) == '(') {
            temp = findStr(p);
        }
        // 说明有()
        boolean firstMatch;
        if(temp != null) {
            // 因为涉及到切割字符串,后面那部分就是比较当前一部分是否相等
            firstMatch = (s.length() >= temp.length()) && (s.substring(0, temp.length()).equals(temp));
            if(p.length() >= temp.length() + 3 && p.charAt(temp.length() + 2) == '*') {
                return (firstMatch && isMatch(s.substring(temp.length()), p)) || isMatch(s, p.substring(temp.length() + 3));
            }else {
                return firstMatch && isMatch(s.substring(temp.length()), p.substring(temp.length()));
            }
        }else {
            // 剩下就是普通的了
            firstMatch = !s.isEmpty() && (p.charAt(0) == s.charAt(0) || p.charAt(0) == '.');
            if(p.length() >= 2 && p.charAt(1) == '*') {
                return (firstMatch && isMatch(s.substring(1), p)) || isMatch(s, p.substring(2));
            }else {
                return firstMatch && isMatch(s.substring(1), p.substring(1));
            }
        }
    }
    private String findStr(String str) {
        int index = 0;
        for(int i = 0; i < str.length(); i++) {
            if(str.charAt(i) == ')') {
                index = i;
                break;
            }
        }
        return str.substring(1, index);
    }

第二题,讲道理我看不太懂意思,直接 return 3 (AC 40%)

问答题

是玩家,定时器啥的,讲道理我也看不太懂, 我真的菜

public class AskQuestion {

    public static void main(String[] args) {
        Player player = new Player();
        MyTimer myTimer = new MyTimer();
        player.setMyTimer(myTimer);
        myTimer.registerEvent(new AddPowerTimeEvent());
        while (true) {
            myTimer.tick();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

// 游戏角色
class Player {
    // 自身的能量
    private int power;

    private MyTimer myTimer;

    public void setMyTimer(MyTimer myTimer) {
        this.myTimer = myTimer;
        myTimer.setTarget(this);
    }

    public void staimerPower() {
        power++;
    }
}

// 定时器
class MyTimer {

    // 检测主体
    private Object target;


    private ArrayList<TimeEvent> events = new ArrayList<>();

    public void setTarget(Object target) {
        this.target = target;
    }

    public void registerEvent(TimeEvent event) {
        events.add(event);
    }

    public void tick() {
        for(int i = 0; i < events.size(); i++) {
            TimeEvent event = events.get(i);
            event.doIt(target);
        }
    }

}

interface TimeEvent {
    // 判断当前是否合法
    boolean canDo();

    void doIt(Object obj);
}

class AddPowerTimeEvent implements TimeEvent {

    // 自定义规则
    private long startTime;

    private long blue;

    @Override
    public boolean canDo() {
        // 达到时间范围
        if(System.currentTimeMillis() - startTime >= blue) {
            return true;
        }
        return false;
    }

    @Override
    public void doIt(Object obj) {
        if(canDo()) {
            this.startTime = System.currentTimeMillis();
            Player player = (Player) obj;
            player.staimerPower();
        }
    }
}
#笔试题目##米哈游#
全部评论
老哥你是什么岗的
1 回复 分享
发布于 2020-04-04 09:19
兄弟,我笑死。第一题我直接返回true发现可以过60%,然后就直接用随机给排,最后过了80%第二题,直觉答案应该是字符串中1出现次数的一半,或者0,直接用0的跑,通过0%,最后过了60%两道题加起来写了10分钟,因为忙着和朋友打王者的战队赛就早早的溜了。干,可惜前面的选择题没好好做,后面的那个定时管理也没写代码,我没了。
点赞 回复 分享
发布于 2020-04-03 23:48
老哥几号投的简历啊?
点赞 回复 分享
发布于 2020-04-04 09:58
我好像投错了职位,这个好像没有实习的平台后端开发
点赞 回复 分享
发布于 2020-04-09 09:39

相关推荐

2024-12-18 14:13
蚌埠坦克学院 golang
苏州科技大学:面试官:接个面试,对面同学是个杀软二次元
点赞 评论 收藏
分享
评论
3
8
分享

创作者周榜

更多
牛客网
牛客企业服务