码迷,mamicode.com
首页 > 其他好文 > 详细

5403. Find the Kth Smallest Sum of a Matrix With Sorted Rows

时间:2020-05-03 18:14:33      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:相加   inpu   leetcode   problem   for   二维   order   discus   put   

You are given an m * n matrix, mat, and an integer k, which has its rows sorted in non-decreasing order.

You are allowed to choose exactly 1 element from each row to form an array. Return the Kth smallest array sum among all possible arrays.

 

Example 1:

Input: mat = [[1,3,11],[2,4,6]], k = 5
Output: 7
Explanation: Choosing one element from each row, the first k smallest sum are:
[1,2], [1,4], [3,2], [3,4], [1,6]. Where the 5th sum is 7.  

Example 2:

Input: mat = [[1,3,11],[2,4,6]], k = 9
Output: 17

Example 3:

Input: mat = [[1,10,10],[1,4,5],[2,3,6]], k = 7
Output: 9
Explanation: Choosing one element from each row, the first k smallest sum are:
[1,1,2], [1,1,3], [1,4,2], [1,4,3], [1,1,6], [1,5,2], [1,5,3]. Where the 7th sum is 9.  

Example 4:

Input: mat = [[1,1,10],[2,2,9]], k = 7
Output: 12

 

Constraints:

  • m == mat.length
  • n == mat.length[i]
  • 1 <= m, n <= 40
  • 1 <= k <= min(200, n ^ m)
  • 1 <= mat[i][j] <= 5000
  • mat[i] is a non decreasing array.

 

题意:

  给出一个二维数组,数组的每一行按照非减的顺序进行排列,在每一行中选出一个数字,求出所选数字的和,将这些数字排序,并求出第k小的那个。

思路:

  本来想的是用DFS进行求解,如果这样做的话,最欢情况下的时间复杂度会是O(40^40),用DFS遍历求解的话,有可能会出现后面出现的数字比前面出现数字要小的情况,好像没办法剪枝,这种方法行不通。换种思路,我们可以用相邻两行进行相加,求得的和进行排序,截取前面的k个数字。然后再将所求的和与下一行元素相加。

Code:

 1 class Solution {
 2 public:
 3     int kthSmallest(vector<vector<int>>& mat, int k) {
 4         vector<int> ans = {0}, temp; 
 5         for (int i = 0; i < mat.size(); ++i) {
 6             for (int j = 0; j < mat[i].size(); ++j) {
 7                 for (int v = 0; v < ans.size(); ++v) {
 8                     temp.push_back(mat[i][j] + ans[v]);
 9                 }
10             }
11             sort(temp.begin(), temp.end());
12             ans.clear();
13             int len = min(k, (int)temp.size());
14             for (int j = 0; j < len; ++j) {
15                 ans.push_back(temp[j]);
16             }
17             temp.clear();
18         }
19         return ans[k-1];
20     }
21 };

 

参考:

  https://leetcode.com/problems/find-the-kth-smallest-sum-of-a-matrix-with-sorted-rows/discuss/609707/c%2B%2B-solution-with-explanation

 

5403. Find the Kth Smallest Sum of a Matrix With Sorted Rows

标签:相加   inpu   leetcode   problem   for   二维   order   discus   put   

原文地址:https://www.cnblogs.com/ruruozhenhao/p/12822640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!