讨论/题目交流/🏆 第 176 场力扣周赛/
🏆 第 176 场力扣周赛

欢迎小伙伴们在这里交流分享你的参赛心得以及体验。【前往竞赛】

image.png

3 分 - 统计有序矩阵中的负数
5 分 - 最后 K 个数的乘积
5 分 - 最多可以参加的会议数目
6 分 - 多次求和构造目标数组

展开讨论

小菜鸡一枚,只写了两道题,第三题是别人的题解,搬过来了,待会再去研究一下。
第一题————5340. 统计有序矩阵中的负数:

class Solution {
    public int countNegatives(int[][] grid) {
        int ans = 0;
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                if (grid[i][j] < 0) {
                    ans++;
                }
            }
        }
        return ans;
    }
}

第二题————5341. 最后 K 个数的乘积:

class ProductOfNumbers {

    List<Integer> lst;
    Map<Integer, Integer> map;
    public ProductOfNumbers() {
        lst = new ArrayList<>();
        map = new HashMap<>();
    }

    public void add(int num) {
        lst.add(num);
        map = new HashMap<>();
    }

    public int getProduct(int k) {
        if (map.containsKey(k)) {
            return map.get(k);
        }
        int len = lst.size();
        int index = len - 1;
        int ans = 1;
        while (len - index <= k) {
            ans *= lst.get(index);
            index--;
        }
        map.put(k, ans);
        return ans;
    }
}

/**
 * Your ProductOfNumbers object will be instantiated and called as such:
 * ProductOfNumbers obj = new ProductOfNumbers();
 * obj.add(num);
 * int param_2 = obj.getProduct(k);
 */

第三题————5342. 最多可以参加的会议数目:

class Solution {
    public int maxEvents(int[][] events) {
        Arrays.sort(events, (e1, e2) -> Integer.compare(e1[0], e2[0]));

        // 优先队列按照结束时间排序
        PriorityQueue<int[]> pq = new PriorityQueue<>((e1, e2) -> Integer.compare(e1[1], e2[1]));

        int N = events.length;
        int i = 0;
        int d = 1;
        int count = 0;
        while (i < N || !pq.isEmpty()) {
            // 模拟第 d 天的决策
            // 将已经开始的会议加入队列
            while (i < N && events[i][0] <= d) {
                pq.add(events[i]);
                i++;
            }

            // 找出一个可以参加的最早结束的会议
            while (!pq.isEmpty()) {
                int[] e = pq.poll();
                if (e[1] >= d) {
                    count++;
                    break;
                }
            }
            d++;
        }

        return count;
    }
}
1
展开全部 24 讨论