博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode题解(1001):网格照明(Python)
阅读量:1899 次
发布时间:2019-04-26

本文共 1645 字,大约阅读时间需要 5 分钟。

题目:(困难)

标签:哈希表、几何

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( L + Q ) O(L+Q) O(L+Q) O ( L ) O(L) O(L) 496ms (25.45%)
Ans 2 (Python)
Ans 3 (Python)

解法一:

class Solution:    def gridIllumination(self, N: int, lamps: List[List[int]], queries: List[List[int]]) -> List[int]:        def is_valid(x, y):            return 0 <= x < N and 0 <= y < N        def near(x, y):            maybe = [(x, y), (x - 1, y - 1), (x - 1, y), (x - 1, y + 1), (x, y + 1), (x + 1, y + 1), (x + 1, y),                     (x + 1, y - 1), (x, y - 1)]            return [(x, y) for x, y in maybe if is_valid(x, y)]        size1, size2 = len(lamps), len(queries)        count1 = collections.Counter()        count2 = collections.Counter()        count3 = collections.Counter()        count4 = collections.Counter()        count_lamp = {
(x, y) for x, y in lamps} for i in range(size1): x1, y1 = lamps[i] count1[x1] += 1 count2[y1] += 1 count3[x1 - y1] += 1 count4[x1 + y1] += 1 ans = [] for i in range(size2): # 查询 x2, y2 = queries[i] if count1[x2] > 0 or count2[y2] > 0 or count3[x2 - y2] > 0 or count4[x2 + y2] > 0: ans.append(1) else: ans.append(0) # 关灯 for x1, y1 in near(x2, y2): if (x1, y1) in count_lamp: count1[x1] -= 1 count2[y1] -= 1 count3[x1 - y1] -= 1 count4[x1 + y1] -= 1 count_lamp.remove((x1, y1)) # print(count1, count2, count3, count4, count_lamp) return ans

转载地址:http://yczcf.baihongyu.com/

你可能感兴趣的文章
线段树应用(建树、区间查询之最小值)
查看>>
线段树应用(建树、查询任意区间元素个数)
查看>>
线段树应用(建树、单点更新、区间求和)
查看>>
线段树应用(建树、区间更新及懒标记、区间查询)
查看>>
ST算法(Sparse Table,稀疏表)简介
查看>>
并查集
查看>>
Python中readlines()函数的hint参数解读
查看>>
主席树(POJ-2104、HDU-2665)
查看>>
链式前向星
查看>>
求最长公共子序列(LCS)的长度:动态规划
查看>>
求最长公共子序列(LCS)的长度并输出序列:动态规划
查看>>
状态压缩DP-->蓝桥杯2019:糖果
查看>>
状态压缩DP --> POJ 3254 Corn Fields
查看>>
TensorFlow 2.0 安装步骤
查看>>
图的深度优先遍历
查看>>
图的广度优先遍历
查看>>
递归方法输出x行y列字符串z
查看>>
桶排序-->改编自《啊哈!算法》
查看>>
冒泡排序-->改编自《啊哈!算法》
查看>>
快速排序-->改编自《啊哈!算法》
查看>>