力扣刷题篇之每日一题(2023年12月ing)

系列文章目录

力扣刷题篇之每日一题(2023年11月完成)-CSDN博客


前言

十二月啦,开始!!!!


12.02ing

每日一题

1

2661. 找出叠涂元素 - 力扣(LeetCode)

力扣刷题篇之每日一题(2023年12月ing)_第1张图片

力扣刷题篇之每日一题(2023年12月ing)_第2张图片

讲道理,这个题真心绕,看不懂,得亏评论区老哥:按照arr数组从左到右的顺序遍历各个arr[i],涂抹这个值在矩阵中对应位置的网格,一旦你发现它所在的行或者列满员了,就返回这个i

class Solution {
    public int firstCompleteIndex(int[] arr, int[][] mat) {
        // 初始化变量
        int i = 0, j, m = mat.length, n = mat[0].length, mn = m * n;
        int[] positionRow = new int[mn + 1], positionColumn = new int[mn + 1], row = new int[m];

        // 遍历矩阵的每一列
        while (i < n) {
            j = 0;
            // 遍历矩阵的每一行
            while (j < m) {
                // 记录每个数字在矩阵中的行和列的位置
                positionRow[mat[j][i]] = j;
                positionColumn[mat[j++][i]] = i;
            }
            // 将该列涂色数置为0,继续下一列
            mat[0][i++] = 0;
        }

        // 遍历数组 arr
        for (i = 0; i < mn; i++) {
            // 如果该数字所在行的涂色数达到 n,或者该数字所在列的涂色数达到 m,则满足条件,返回结果
            if (++row[positionRow[arr[i]]] == n) break;
            if (++mat[0][positionColumn[arr[i]]] == m) break;
        }

        // 返回结果
        return i;
    }
}

力扣刷题篇之每日一题(2023年12月ing)_第3张图片

2

1094. 拼车 - 力扣(LeetCode)

力扣刷题篇之每日一题(2023年12月ing)_第4张图片

这个不对,想着动态更新车上的人数,但其实不需要,更新上车下车的人就好了,看第二个代码就简单很多。 

class Solution {
    public boolean carPooling(int[][] trips, int capacity) {
        int longest = 0;
        // 找出最远要到的地方
        for (int i = 0; i < trips.length; i++) {
            longest = Math.max(longest, trips[i][2]);
        }

        // 用 save 数组去记录每一个地方有多少人
        int[] save = new int[longest + 1];

        // 遍历每个行程
        for (int i = 0; i < trips.length; i++) {
            for (int j = trips[i][1]; j <= trips[i][2]; j++) {
                // 上车更新人数
                save[j] += trips[i][0];

                // 如果车上的人多于位置的数量 capacity,则返回 false
                if (save[j] > capacity) {
                    return false;
                }

                // 下车更新人数
                if (j == trips[i][2]) {
                    save[j] -= trips[i][0];
                }
            }
        }

        return true;
    }
}

更新车上有的座位数,通过判断capacity是否还大于等于零,说明还能坐得下。否则就是false。 

class Solution {
    public boolean carPooling(int[][] trips, int capacity) {
        int[]n = new int[1001];
        int max = 0;
        for (int[] trip : trips) {
            n[trip[1]] += trip[0];
            n[trip[2]] -= trip[0];
            if(trip[2] > max) max = trip[2];
        }
        for (int i = 0; i <= max ; i++) {
            capacity -= n[i];
            if(capacity < 0) return false;
        }
        return true;
    }
}

力扣刷题篇之每日一题(2023年12月ing)_第5张图片


总结

你可能感兴趣的:(算法与数据结构,leetcode,leetcode,算法,java,数据结构,学习)