【Leetcode】1380. Lucky Numbers in a Matrix

題目地址:

https://leetcode.com/problems/lucky-numbers-in-a-matrix/

給定一個二維矩陣,求其中所有滿足其爲所在行最小值且爲所在列最大值的數。可以先找到每一行的最小值和每一列的最大值,然後再把符合條件的數挑出來即可。代碼如下:

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

public class Solution {
    public List<Integer> luckyNumbers (int[][] matrix) {
        List<Integer> res = new ArrayList<>();
        
        // mins[i]是第i行的最小值,maxs[i]是第j行的最大值
        int[] mins = new int[matrix.length], maxs = new int[matrix[0].length];
        Arrays.fill(mins, Integer.MAX_VALUE);
        Arrays.fill(maxs, Integer.MIN_VALUE);
        
        int s = 0, t = 0;
        while (s < matrix.length || t < matrix[0].length) {
        	// 求第s行的最小值
            if (s < matrix.length) {
                for (int i = 0; i < matrix[0].length; i++) {
                    mins[s] = Math.min(mins[s], matrix[s][i]);
                }
                s++;
            }
            // 求第t列的最大值
            if (t < matrix[0].length) {
                for (int i = 0; i < matrix.length; i++) {
                    maxs[t] = Math.max(maxs[t], matrix[i][t]);
                }
                t++;
            }
        }
    
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                if (matrix[i][j] == mins[i] && matrix[i][j] == maxs[j]) {
                    res.add(matrix[i][j]);
                }
            }
        }
        
        return res;
    }
}

時間複雜度O(mn)O(mn),空間O(m+n)O(m+n)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章