Loading

2023.6.29 重构 2 行二进制矩阵

image

考虑贪心策略。每一列,把1优先放在lower和upper两行中较大的那一行上。

impl Solution {
    pub fn reconstruct_matrix(upper: i32, lower: i32, colsum: Vec<i32>) -> Vec<Vec<i32>> {
        let n = colsum.len();
        
        let (mut upper, mut lower) = (upper, lower);
        let mut res = vec![vec![0; n]; 2];

        for (i, sum) in colsum.into_iter().enumerate() {
            if upper + lower < sum { return Vec::new(); }

            if sum == 2 {
                if upper == 0 || lower == 0 { return Vec::new(); }
                upper -= 1; lower -= 1;
                res[0][i] = 1;
                res[1][i] = 1;
            }
            else if sum == 1 {
                if (lower > upper) { res[1][i] = 1; lower -= 1; }
                else { res[0][i] = 1; upper -= 1; }
            }
        }
        if lower > 0 || upper > 0 { return Vec::new(); }
        res
    }
}
posted @ 2023-06-29 12:40  烤肉kr  阅读(4)  评论(0编辑  收藏  举报