有序矩阵中的第 k 个最小数组和

发布时间 2023-05-28 15:15:11作者: 失控D大白兔

1. 暴力记录前k个

class Solution {
public:
    int kthSmallest(vector<vector<int>>& mat, int k) {
        vector<int> pre(k,0); //存储前k个最小的和
        int cur[mat[0].size() * k]; //存储
        int size = 1;//用于记录pre当前大小
        for (auto& row : mat) {//遍历每一行
            int i = 0; //从0开始, 对当前行
            for (int j = 0; j < size; ++j) { //遍历pre里面所有数
                for (int& v : row) { //遍历当前行所有数
                    cur[i++] = pre[j] + v;  //计算当前轮次所有数组和
                }
            }
            sort(cur, cur + i); //对cur里面的数排序
            size = min(i, k); //更新pre数组大小,刚开始pre可能放不满
            for (int j = 0; j < size; ++j) //记录前k个
                pre[j] = cur[j];
        }
        return pre[k - 1];
    }
};