鱼C论坛

 找回密码
 立即注册
查看: 2483|回复: 0

[学习笔记] Leetcode 1536. Minimum Swaps to Arrange a Binary Grid

[复制链接]
发表于 2020-8-3 09:05:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Given an n x n binary grid, in one step you can choose two adjacent rows of the grid and swap them.

A grid is said to be valid if all the cells above the main diagonal are zeros.

Return the minimum number of steps needed to make the grid valid, or -1 if the grid cannot be valid.

The main diagonal of a grid is the diagonal that starts at cell (1, 1) and ends at cell (n, n).

 

Example 1:



Screenshot from 2020-08-02 21-04-19.png




Input: grid = [[0,0,1],[1,1,0],[1,0,0]]
Output: 3
Example 2:



Screenshot from 2020-08-02 21-04-26.png




Input: grid = [[0,1,1,0],[0,1,1,0],[0,1,1,0],[0,1,1,0]]
Output: -1
Explanation: All rows are similar, swaps have no effect on the grid.
Example 3:



Screenshot from 2020-08-02 21-04-36.png




Input: grid = [[1,0,0],[1,1,0],[1,1,1]]
Output: 0
 

Constraints:

n == grid.length
n == grid[i].length
1 <= n <= 200
grid[i][j] is 0 or 1
class Solution:
    def minSwaps(self, grid: List[List[int]]) -> int:
        zeros = [0 for _ in grid]
        result = 0
        for i in range(len(grid)):
            count = 0
            for j in range(len(grid[i]) - 1, -1, -1):
                if grid[i][j] != 0:
                    break
                count += 1
            zeros[i] = count
        
        n = len(grid)
        for i in range(len(grid)):
            target = n - i - 1
            for j in range(i, len(grid) + 1):
                
                if j < n and zeros[j] >= target:
                    break
            if j == n:
                return -1
            result += j - i
            temp = zeros[j]
            for k in range(j, i, -1):
                zeros[k] = zeros[k - 1]
            zeros[i] = temp
        return result

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 18:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表