• [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
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    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 }
  • 相关阅读:
    ACM Red and Black
    ACM Wooden Stricks
    ACM Strange fuction
    ACM pie
    ACM Doing Homework again
    ACM FatMouse' Trade
    ACM 今年暑假不AC
    ACM Ignatius and the Princess II
    一、数组---第三大的数
    一、数组---移动零※※※※※※
  • 原文地址:https://www.cnblogs.com/strengthen/p/11831505.html
Copyright © 2020-2023  润新知