阿里4.13笔试

第一题:选动物老大,n个小动物,编号1-n,代表武力值,值越小,武力值越高,每个小动物都有一票投票权,可以投给自己或者自己崇拜的动物,或者和自己崇拜的动物跟票。只能崇拜武力值比自己厉害的动物。
输入样例:第一行动物个数, 第二行崇拜对象。
4
0 1 1 1
输出
4
1
1
1
这道题笔试的时候我AC了。
我的解题思路:因为动物只会崇拜能力值比自己高的动物,所以从后向前依次统计每个动物受了多少个其他动物的崇拜,所以每个动物的得票数为崇拜对象数+1(自己给自己投).

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] an = new int[n];
        int[] pow = new int[n + 1];
        for(int i = 0; i < n; i++){
            an[i] = scanner.nextInt();
        }
        for (int i = an.length - 1; i >= 0; i--) {
            if(an[i] == 0){
                continue;
            }
            pow[an[i]] = pow[an[i]] + pow[i + 1] + 1;
        }
        for (int i = 1; i < pow.length; i++) {
            System.out.println(pow[i] + 1);
        }
    }

第二题:n个城市n个人,每个城市一个人,选择一个城市x,所有人去那聚会,聚合结束所有人返回各自城市。
有m条单向路径,保证每个人可以到达城市x,一个人所消耗时间为往返时间和,每个人选择自己的最短路径,问最长的时间是多少

输入样例:第一行n,m,x,第二行路径
4 8 2
1 2 4
1 3 2
1 4 7
2 1 1
2 3 5
3 1 2
3 4 4
4 2 3
输出
10
能不能AC不清楚,测试用例是可以过的
这道题由于时间不足(可能是我太菜),当时写的时候比较慌,出了蛮多问题,14号中午又接到面试,就搁置了。
今天仔细思考了下,还是用暴力方法解决了。我用的是dfs,直接找每个城市到达目的城市的最短路径的最长时间。最后后比较每个城市的时间。

 static int[] mark;//标记数组防止重复访问
    static int step;//记录步数

    public static int minPath(int[][] map, int start, int end, int nowStep){
        int res = 0;
        mark[start] = 1;
        int tmp = Integer.MAX_VALUE;
        for (int i = 1; i < map[start].length; i++) {
            if(map[start][i] == 0 || mark[i] != 0){
                continue;
            }
            if(i == end){
                res = map[start][i];
                break;
            }else{
                step++;
                int tmpRes = minPath(map, i, end, nowStep+1);
                if(tmp > step){
                    res = tmpRes;
                    tmp = step;
                    step = nowStep;
                }
                else if(tmp == step){
                    res = Math.max(tmpRes, res);
                }
            }
        }
        mark[start] = 0;
        return res;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int k = scanner.nextInt();
        int[][] map = new int[n+1][n+1];
        mark = new int[n+1];
        int[] path = new int[n+1];
        for(int i = 1; i <=m; i++){
            int x = scanner.nextInt();
            int y =  scanner.nextInt();
            map[x][y] = scanner.nextInt();
        }
        for (int i = 1; i < path.length; i++) {
            if(i == k){
                continue;
            }
            step = 0;
            path[i] = minPath(map, i, k, 0) + minPath(map, k, i, 0);
        }
        int max = 0;
        for (int i : path) {
            max = Math.max(max, i);
        }
        System.out.println(max);
    }
#阿里笔试2020##笔试题目##阿里巴巴#
全部评论
请问楼主知道原问题能在哪找到吗?我想练练
点赞 回复 分享
发布于 2020-04-22 11:03
楼主我想问下,第二题中你在DFS的时候,在遍历同一层的时候,你在计算res的时候,不应该是Math.max(tmpRes, res) + map[start][i]吗?这样的话返回给上一层的时候才是一个path上的时间。
点赞 回复 分享
发布于 2020-04-21 18:17
第二题 你这样只能过 93%  有重边没考虑
点赞 回复 分享
发布于 2020-04-16 21:45

相关推荐

自从我室友在计算机导论课上听说了“刷&nbsp;LeetCode&nbsp;是进入大厂的敲门砖”,整个人就跟走火入魔了一样。他在宿舍门口贴了一张A4纸,上面写着:“正在&nbsp;DP,请勿打扰,否则&nbsp;Time&nbsp;Limit&nbsp;Exceeded。”日记本的扉页被他用黑色水笔加粗描了三遍:“Talk&nbsp;is&nbsp;cheap.&nbsp;Show&nbsp;me&nbsp;the&nbsp;code。”连宿舍聚餐,他都要给我们讲解:“今天的座位安排可以用回溯算法解决,但为了避免栈溢出,我建议用动态规划。来,这是状态转移方程:dp[i][j]&nbsp;代表第&nbsp;i&nbsp;个人坐在第&nbsp;j&nbsp;个位置的最优解。”我让他去楼下取个快递,他不直接去,非要在门口踱步,嘴里念念有词:“这是一个图的遍历问题。从宿舍楼(root)到驿站(target&nbsp;node),我应该用&nbsp;BFS&nbsp;还是&nbsp;DFS?嗯,求最短路径,还是广度优先好。”和同学约好出去开黑,他会提前发消息:“集合点&nbsp;(x,&nbsp;y),我们俩的路径有&nbsp;k&nbsp;个交点,为了最小化时间复杂度,应该在&nbsp;(x/2,&nbsp;y/2)&nbsp;处汇合。”有一次另一个室友低血糖犯了,让他帮忙找颗糖,他居然冷静地分析道:“别急,这是一个查找问题。零食箱是无序数组,暴力查找是&nbsp;O(n)。如果按甜度排序,我就可以用二分查找,时间复杂度降到&nbsp;O(log&nbsp;n)。”他做卫生也要讲究算法效率:“拖地是典型的岛屿问题,要先把连通的污渍区块都清理掉。倒垃圾可以用双指针法,一个指针从左往右,一个从右往左,能最快匹配垃圾分类。”现在我们宿舍的画风已经完全变了,大家不聊游戏和妹子,对话都是这样的:“你&nbsp;Two&nbsp;Sum&nbsp;刷了几遍了?”“别提了,昨天遇到一道&nbsp;Hard&nbsp;题,我连暴力解都想不出来,最后只能看题解。你呢?”“我动态规划还不行,总是找不到最优子结构。今天那道接雨水给我整麻了。”……LeetCode&nbsp;真的害了我室友!!!
老六f:编程嘉豪来了
AI时代还有必要刷lee...
点赞 评论 收藏
分享
评论
3
11
分享

创作者周榜

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