zoukankan      html  css  js  c++  java
  • 【leetcode】947. Most Stones Removed with Same Row or Column

    题目如下:

    On a 2D plane, we place stones at some integer coordinate points.  Each coordinate point may have at most one stone.

    Now, a move consists of removing a stone that shares a column or row with another stone on the grid.

    What is the largest possible number of moves we can make?

    Example 1:

    Input: stones = [[0,0],[0,1],[1,0],[1,2],[2,1],[2,2]]
    Output: 5
    

    Example 2:

    Input: stones = [[0,0],[0,2],[1,1],[2,0],[2,2]]
    Output: 3
    

    Example 3:

    Input: stones = [[0,0]]
    Output: 0
    

    Note:

    1. 1 <= stones.length <= 1000
    2. 0 <= stones[i][j] < 10000

    解题思路:题目解法本身不难,难点在于包了一个壳,去掉壳后就能看到本质了。本题的壳就是分组,把所有行相同或者列相同的元素分进同一个组,计算出一个有多少个组,删除操作完成后,每个组都会留下一个元素。最后的结果就是stones的个数减去组的个数。至于怎么求组的个数,DFS或者并查集都是可行的方法。我的解法是用DFS,最初用的是visit数组来保存元素是否遍历过,但是python语言会超时,只好改成每遍历完一个元素,都将其从stones中删除。

    代码如下:

    class Solution(object):
        def removeStones(self, stones):
            """
            :type stones: List[List[int]]
            :rtype: int
            """
            group = 0
            original_len = len(stones)
            while len(stones) > 0:
                group += 1
                queue = [(stones[0][0],stones[0][1])]
                del stones[0]
                while len(queue) > 0:
                    r, c = queue.pop(0)
                    inx_internal = 0
                    while inx_internal < len(stones):
                        if r == stones[inx_internal][0] or c == stones[inx_internal][1]:
                            queue.append((stones[inx_internal][0], stones[inx_internal][1]))
                            del stones[inx_internal]
                        else:
                            inx_internal += 1
            return original_len - group
  • 相关阅读:
    Django WSGI响应过程之WSGIHandler
    python多线程
    性能测试概念介绍
    Django惰性加载和LazyObject
    Django中间件分析
    python unittest 快速入门
    jenkins+ant+jmeter测试环境部署
    [Vue warn]: Invalid prop: type check failed for prop "clearable". Expected Boolean, got String with value "true".
    JavaScript通过for循环实现九九乘法表的左下、左上、右上、右下对齐成直角三角形
    找出正确手机号码
  • 原文地址:https://www.cnblogs.com/seyjs/p/10021220.html
Copyright © 2011-2022 走看看