米哈游笔试记录

1 括号匹配
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        StringBuilder buf = new StringBuilder();
        while(T-- > 0) {
            String s = sc.next();
            Stack<Character> stack = new Stack<>();
            int count = 0;
            for (int i = 0; i < s.length(); ++i) {
                if (stack.isEmpty() || s.charAt(i) == '[' || s.charAt(i) == '{') {
                    stack.add(s.charAt(i));
                } else {
                    if (s.charAt(i) == ']' && stack.peek() == '['
                            || stack.peek() == '{' && s.charAt(i) == '}') {

                    } else {
                        count++;
                    }
                    stack.pop();
                }
            }
            buf.append(count).append("\n");
        }
        System.out.print(buf);
    }
}
2 组合数学中的插板法
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        StringBuilder buf = new StringBuilder();
        while(T-- > 0) {  // 10^4
            int n = sc.nextInt() / 3;  // 10^5
            int count = (int)((long)(n-1)*(n-2) / 2);
            buf.append(count).append("\n");
        }
        System.out.print(buf);
    }
}
3 BFS
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int r1 = sc.nextInt();
        int c1 = sc.nextInt();
        int r2 = sc.nextInt();
        int c2 = sc.nextInt();
        System.out.println(game(r1, c1, r2, c2));

    }

    public static int game(int r1, int c1, int r2, int c2) {
        if (r1 == r2 && c1 == c2) {
            return 0;
        }
        int[][] pos = new int[10][9];
        pos[r1][c1] = 1;
        Queue<Integer> que = new LinkedList<>();
        que.add(r1 * 10 + c1);
        int[][] dir = {{-3, -2}, {-2, -3}, {2, -3}, {3, -2},
                {3, 2}, {2, 3}, {-2, 3}, {-3, 2}};
        while (!que.isEmpty()) {
            int xy = que.remove();
            int x = xy / 10;
            int y = xy % 10;
            for (int i = 0; i < 8; ++i) {
                int xx = x + dir[i][0];
                int yy = y + dir[i][1];
                if (xx >= 0 && xx < 10 && yy >= 0 && yy < 9 && pos[xx][yy] == 0) {
                    if (xx == r2 && yy == c2) {
                        return pos[x][y];
                    }
                    int nextX = x + dir[i][0] / 3;
                    int nextY = y + dir[i][1] / 3;
                    if (nextX == r2 && nextY == c2) {
                        continue;
                    } else {
                        nextX = nextX + xx >> 1;
                        nextY = nextY + yy >> 1;
                        if (nextX == r2 && nextY == c2) {
                            continue;
                        }
                    }
                    pos[xx][yy] = pos[x][y] + 1;
                    que.add(xx * 10 + yy);
                }
            }
        }
        return -1;
    }
}



#米哈游##笔经#
全部评论
看不懂JAVA,可以解释一下第二题是什么意思吗, buf.append(count).append("\n");这句话不是拓展字符串吗?和最后的结果有什么关系
点赞 回复 分享
发布于 2021-09-13 08:32

相关推荐

已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
2 22 评论
分享
牛客网
牛客企业服务