3.12美团笔试解法

1

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for (int i = 0; i < n; i++) {
            int num = scanner.nextInt();
            if (isNum(num)) {
                System.out.println("yes");
            }else {
                System.out.println("no");
            }
        }
    }

    private static boolean isNum(int num) {
        if (num % 11 == 0) {
            return true;
        }
        int count = 0;
        while (num != 0) {
            if (num % 10 == 1) {
                count ++;
            }
            num /= 10;
        }
        return count >= 2;
    }

}

2

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = scanner.nextInt();
        }
        int[] preSum = getPreSum(nums);
        int count = 0;
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
                // [i, j]
                if ((preSum[j + 1] - preSum[i]) % 2 == 0) {
                    count ++;
                }
            }
        }
        System.out.println(count);
    }

    private static int[] getPreSum(int[] nums) {
        // res[i] [0,i-1]之间的-1的个数
        int[] res = new int[nums.length + 1];
        for (int i = 0; i < nums.length; i++) {
            res[i + 1] = res[i];
            if (nums[i] == -1) {
                res[i + 1] ++;
            }
        }
        return res;
    }

}

3

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[][] nums = new int[n][2];
        for (int i = 0; i < n; i++) {
            nums[i][0] = scanner.nextInt();
            nums[i][1] = scanner.nextInt();
        }
        boolean[] visited = new boolean[m + 1];
        Arrays.fill(visited, false);
        int res = fun(nums, n - 1, visited);
        System.out.println(res);
    }

    /**
     * 下一个尝试满足的顾客下表 [0,n-1]
     */
    public static int fun(int[][] nums, int i, boolean[] used) {
        if (i < 0) {
            return 0;
        }
        // 不满足当前顾客
        int res = fun(nums, i - 1, used);
        // 满足当前顾客
        int[] customer = nums[i];
        if (!used[customer[0]] && !used[customer[1]]) {
            used[customer[0]] = true;
            used[customer[1]] = true;
            res = Math.max(res, fun(nums, i - 1, used) + 1);
            used[customer[0]] = false;
            used[customer[1]] = false;
        }
        return res;
    }
}

4

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[] nums = new int[m];
        for (int i = 0; i < nums.length; i++) {
            nums[i] = scanner.nextInt();
        }
        int res = fun(nums, n);
        System.out.println(res);
    }

    private static int fun(int[] times, int n) {
        Map<Integer, List<Integer>> map = new HashMap<>();
        for (int i = 1; i <= n; i++) {
            map.put(i, new ArrayList<>());
        }
        for (int i = 1; i < times.length; i++) {
            List<Integer> list = map.get(times[i]);
            list.add(i);
        }
        int curPos = 1;
        int count = 0;
        for (int i = 0; i + 1 < times.length; i++) {
            if (times[i + 1] == curPos) {
                // 当前所在节点下一秒爆炸,找到下一个最晚爆炸的点
                int maxIndex = -1;
                int maxValue = 0;
                for (int j = 1; j <= n; j++) {
                    List<Integer> list = map.get(j);
                    if (list.isEmpty()) {
                        maxIndex = j;
                        maxValue = Integer.MAX_VALUE;
                        break;
                    }
                    int k = 0;
                    for (; k < list.size() && list.get(k) <= i; k++) {
                    }
                    if (k == list.size()) {
                        maxIndex = j;
                        maxValue = Integer.MAX_VALUE;
                    }else {
                        Integer time = list.get(k);
                        if (time > maxValue) {
                            maxIndex = j;
                            maxValue = time;
                        }
                    }
                }
                // 删除所有maxValue之前的时间
                curPos = maxIndex;
                count ++;
//                // 移除<=maxValue的所有时间
//                for (int j = 1; j <= n; j++) {
//                    List<Integer> list = map.get(j);
//                    Iterator<Integer> iterator = list.iterator();
//                    while (iterator.hasNext()) {
//                        if (iterator.next() <= maxValue) {
//                            iterator.remove();
//                        }
//                    }
//                }
            }
        }
        return count;
    }

}

5

import javax.swing.tree.TreeNode;
import java.util.*;


public class Main {
    public static class TreeNode {
        int val;
        List<TreeNode> children = new ArrayList<>();

        public TreeNode(int val) {
            this.val = val;
        }
    }

    private static int white = 0;
    private static int black = 0;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int nodes = scanner.nextInt();
        int[] colors = new int[nodes];
        int[] parents = new int[nodes];
        for (int i = 0; i < colors.length; i++) {
            colors[i] = scanner.nextInt();
        }
        for (int i = 0; i < parents.length; i++) {
            parents[i] = scanner.nextInt();
        }
        TreeNode root = toTree(parents);
        white = 0;
        black = 0;
        dfs(root, colors);
        System.out.println(white + " " + black);
    }

    /**
     * root不为空
     */
    private static void dfs(TreeNode root, int[] colors) {
        int color = colors[root.val - 1];
        if (color == 0) {
            // 白色
            int count = 0;
            if (root.children.isEmpty()) {
                count = 1;
            }else {
                for (TreeNode child : root.children) {
                    if (colors[child.val - 1] == 1) {
                        count = 1;
                        break;
                    }
                }
            }
            white += count;
        }else {
            // 黑色
            int count = 0;
            if (root.children.isEmpty()) {
                count = 1;
            }else {
                count = 1;
                for (TreeNode child : root.children) {
                    if (colors[child.val - 1] != 0) {
                        count = 0;
                        break;
                    }
                }
            }
            black += count;
        }
        for (TreeNode child : root.children) {
            dfs(child, colors);
        }
    }

    public static TreeNode toTree(int[] parents) {
        Map<Integer, TreeNode> map =new HashMap<>();
        TreeNode root = new TreeNode(-1);
        for (int i = 0; i < parents.length; i++) {
            if (parents[i] == 0) {
                root.val = i + 1;
                map.put(i + 1, root);
            }
        }
        for (int i = 0; i < parents.length; i++) {
            int child = i + 1;
            int parent = parents[i];
            TreeNode parentNode = map.computeIfAbsent(parent, v -> new TreeNode(v));
            TreeNode childNode = map.computeIfAbsent(child, v -> new TreeNode(v));
            parentNode.children.add(childNode);
        }
        return root;
    }

}


#美团笔试##笔经##美团#
全部评论
最后一题不需要构建TreeNode节点,可以用数组或者map存树的父子关系,然后遍历寻找是不是好节点即可,亲测可以AC
1 回复 分享
发布于 2022-03-13 15:01
大佬ak了吗?
点赞 回复 分享
发布于 2022-03-12 23:01

相关推荐

01-14 15:08
东南大学 Java
点赞 评论 收藏
分享
评论
11
32
分享

创作者周榜

更多
牛客网
牛客企业服务