Leetcode 1337. 矩阵中战斗力最弱的 K 行

1337. 矩阵中战斗力最弱的 K 行

给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 10 表示。

请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序。

如果第 i 行的军人数量少于第 j 行,或者两行军人数量相同但 i 小于 j,那么我们认为第 i 行的战斗力比第 j 行弱。

军人 总是 排在一行中的靠前位置,也就是说 1 总是出现在 0 之前。

 
示例 1:
输入:mat = 
[[1,1,0,0,0],
 [1,1,1,1,0],
 [1,0,0,0,0],
 [1,1,0,0,0],
 [1,1,1,1,1]], 
k = 3
输出:[2,0,3]
解释:
每行中的军人数目:
行 0 -> 21 -> 42 -> 13 -> 24 -> 5 
从最弱到最强对这些行排序后得到 [2,0,3,1,4]

示例 2:
输入:mat = 
[[1,0,0,0],
 [1,1,1,1],
 [1,0,0,0],
 [1,0,0,0]], 
k = 2
输出:[0,2]
解释: 
每行中的军人数目:i
行 0 -> 11 -> 42 -> 13 -> 1 
从最弱到最强对这些行排序后得到 [0,2,3,1]

思路
1.建立一个vector<pair<int,int> >,存储每一行的sumi
2.用sort进行排序,直接输出前k个;

代码

class Solution {
    
    
public:
    vector<int> kWeakestRows(vector<vector<int>>& mat, int k) {
    
    
        int m=mat.size();
        vector<int> ret;
        vector<pair<int,int> >ans;

        for(int i=0;i<m;i++){
    
    
            int sum=accumulate(mat[i].begin(),mat[i].end(),0);
            ans.push_back(make_pair(sum,i));
        }
        sort(ans.begin(),ans.end());
        for(int i=0;i<k;i++){
    
    
            ret.push_back(ans[i].second);
        }
        return ret;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_45602618/article/details/114271842