月换新天。为有牺牲多壮志,敢教日

[Swift]LeetCode1253. 重构 2 行二进制矩阵 | Reconstruct a 2-Row Binary Matrix

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(let_us_code)
➤博主域名:https://www.zengqiang.org
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/11831505.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

Given the following details of a matrix with n columns and 2 rows :

  • The matrix is a binary matrix, which means each element in the matrix can be 0 or 1.
  • The sum of elements of the 0-th(upper) row is given as upper.
  • The sum of elements of the 1-st(lower) row is given as lower.
  • The sum of elements in the i-th column(0-indexed) is colsum[i], where colsum is given as an integer array with length n.

Your task is to reconstruct the matrix with upperlower and colsum.

Return it as a 2-D integer array.

If there are more than one valid solution, any of them will be accepted.

If no valid solution exists, return an empty 2-D array. 

Example 1:

Input: upper = 2, lower = 1, colsum = [1,1,1]
Output: [[1,1,0],[0,0,1]]
Explanation: [[1,0,1],[0,1,0]], and [[0,1,1],[1,0,0]] are also correct answers.

Example 2:

Input: upper = 2, lower = 3, colsum = [2,2,1,1]
Output: []

Example 3:

Input: upper = 5, lower = 5, colsum = [2,1,2,0,1,0,1,2,0,1]
Output: [[1,1,1,0,1,0,0,1,0,0],[1,0,1,0,0,0,1,1,0,1]]

Constraints:

  • 1 <= colsum.length <= 10^5
  • 0 <= upper, lower <= colsum.length
  • 0 <= colsum[i] <= 2

给你一个 2 行 n 列的二进制数组:

  • 矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是 0 就是 1
  • 第 0 行的元素之和为 upper
  • 第 1 行的元素之和为 lower
  • 第 i 列(从 0 开始编号)的元素之和为 colsum[i]colsum 是一个长度为 n 的整数数组。

你需要利用 upperlower 和 colsum 来重构这个矩阵,并以二维整数数组的形式返回它。

如果有多个不同的答案,那么任意一个都可以通过本题。

如果不存在符合要求的答案,就请返回一个空的二维数组。

示例 1:

输入:upper = 2, lower = 1, colsum = [1,1,1]
输出:[[1,1,0],[0,0,1]]
解释:[[1,0,1],[0,1,0]] 和 [[0,1,1],[1,0,0]] 也是正确答案。

示例 2:

输入:upper = 2, lower = 3, colsum = [2,2,1,1]
输出:[]

示例 3:

输入:upper = 5, lower = 5, colsum = [2,1,2,0,1,0,1,2,0,1]
输出:[[1,1,1,0,1,0,0,1,0,0],[1,0,1,0,0,0,1,1,0,1]]

提示:

  • 1 <= colsum.length <= 10^5
  • 0 <= upper, lower <= colsum.length
  • 0 <= colsum[i] <= 2

Runtime: 904 ms
Memory Usage: 31.5 MB
复制代码
 1 class Solution {
 2     func reconstructMatrix(_ upper: Int, _ lower: Int, _ colsum: [Int]) -> [[Int]] {
 3         var upper = upper
 4         let lower = lower
 5         if upper + lower != colsum.reduce(0,+)
 6         {
 7             return [[Int]]()
 8         }
 9         var a:[Int] = [Int]()
10         var b:[Int] = [Int]()
11         for i in colsum
12         {
13             if upper > 0 && i != 0
14             {
15                 upper -= 1
16                 a += [1]
17             }
18             else
19             {
20                 a += [0]   
21             }
22             b += [i - a.last!]
23         }
24         if upper == 0
25         {
26             return [a,b]
27         }
28         return [[Int]]()
29     }
30 }
复制代码

Runtime: 728 ms
Memory Usage: 29.3 MB
复制代码
 1 class Solution {
 2     func reconstructMatrix(_ upper: Int, _ lower: Int, _ colsum: [Int]) -> [[Int]] {
 3 
 4         var indices = [Int]()
 5         var onesCount = 0
 6         var  ans = Array<Array<Int>>(repeating: Array<Int>(repeating: 0, count: colsum.count), count: 2)
 7         for i in 0..<colsum.count {
 8             if colsum[i] == 2 {
 9                 ans[1][i] = 1
10                 ans[0][i] = 1
11                 onesCount += 1
12             } else if colsum[i] == 1 {
13                 indices.append(i)
14             }
15         }
16         let upperRemain = upper - onesCount
17         let lowerRemain = lower - onesCount
18         guard upperRemain >= 0 && lowerRemain >= 0 && upperRemain + lowerRemain == indices.count else {
19             return []
20         }
21         let currentUpperSum = upper - onesCount
22         var j = 0
23         while j < currentUpperSum {
24             ans[0][indices[j]] = 1
25             j += 1
26         }
27         while j < indices.count {
28             ans[1][indices[j]] = 1
29             j += 1
30         }
31         return ans
32     }
33 }
复制代码

 

posted @   为敢技术  阅读(288)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示
哥伦布
15°
14:09发布
哥伦布
14:09发布
15°
中雨
西南风
5级
空气质量
相对湿度
88%
今天
中雨
5°/16°
周一
小雨
0°/11°
周二
4°/19°