首页 > 0821 网易开发岗笔试~通用技术A卷
头像
helloRachel
编辑于 2021-10-13 16:31
+ 关注

0821 网易开发岗笔试~通用技术A卷 投票

1. 数组中找两数和小于等于M的数对数量 100
2. 字符串的第k个字符 100
3. 小朋友分纸张 70
4. 二维数组求最短路径 66.67

第三题部分代码,过了70%,请问有路过的大佬解释一下吗?
int tmp = list.get(0); // 第一个小朋友年龄
int num = 1;           // 记录纸的总数
int per = 1;           // 当前小朋友该发的纸数
for (int i = 1; i < list.size(); i++) { // 遍历其他小朋友
    int age = list.get(i);
    if (age > tmp) { // 后面小朋友年纪大,多发一张:per+1
        per++;
    } else if (age < tmp) { // 小 --->有一句话:【旁边】小朋友年龄大的话纸张数要多
        per--; 
    } else // 同岁 
        per = 1; // // 同岁的小朋友可以少于等于
    tmp = list.get(i);
    num += per;
}
第四题用的是矩阵动态规划的思想,想不明白为什么没有AC
public static int minSailCost(int[][] input) {

    int m = input.length, n = input[0].length;
    int[][] res = new int[m][n];
    res[0][0] = 0;
    // 初始化第一列
    for (int i = 1; i < m; i++) {
        if (input[i][0] == 0)
            res[i][0] += (res[i - 1][0] + 2);
        if (input[i][0] == 1)
            res[i][0] += (res[i - 1][0] + 1);
        if (input[i][0] == 2)
            res[i][0] = Integer.MAX_VALUE;
    }
    // 初始化第一行
    for (int j = 1; j < n; j++) {

        if (input[0][j] == 0)
            res[0][j] += (res[0][j - 1] + 2);
        if (input[0][j] == 1)
            res[0][j] += (res[0][j - 1] + 1);
        if (input[0][j] == 2)
            res[0][j] = 999999;
    }


    for (int i = 1; i < m; i++) {
        for (int j = 1; j < n; j++) {
            if (res[i - 1][j] == 9999999 && res[i][j - 1] == 9999999) {
                return -1;
            }

            if (input[i][j] == 0)
                res[i][j] = Math.min(res[i - 1][j], res[i][j - 1]) + 2;
            if (input[i][j] == 1)
                res[i][j] = Math.min(res[i - 1][j], res[i][j - 1]) + 1;
            if (input[i][j] == 2)
                res[i][j] = 9999999;

        }
    }
    print(res);
    return res[m - 1][n - 1];
}



全部评论

(6) 回帖
加载中...
话题 回帖