Day30

作者: wendy_要努力努力再努力 | 来源:发表于2017-12-20 23:17 被阅读0次

差不多两周没刷题了,开会一周,咸鱼一周,惭愧惭愧。

  1. Island Perimeter


思路:开始构想的是在map四周扩张一圈water,然后判断每个cell,如果上下左右存在1,那就在4的基础上减一,这样需要重构一个新的二维数组,太复杂。参考方法是假设每个方格,如果上或左存在1,就意味着两个格子减一,即减二。不算最上一行,和最左一列。

class Solution(object):
    def islandPerimeter(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        edge = 0
        for h in range(len(grid)):
            for w in range(len(grid[0])):
                if grid[h][w] == 1:
                    edge += 4
                    if h>0 and grid[h-1][w]:
                        edge -= 2
                    if w>0 and grid[h][w-1]:
                        edge -= 2
        return edge  

  1. Next Greater Element I
    思路:理解题意错误,开始认为是在相同位置往后找比它大的数;实际上是在相同数的位置往后找比它大的数。需要建立map映射,找到nums数组里每个数对应的其后比它大的数,建立字典;然后在findNums数组里去找有没有对应的键值。用到get函数。
class Solution(object):
    def nextGreaterElement(self, findNums, nums):
        """
        :type findNums: List[int]
        :type nums: List[int]
        :rtype: List[int]
        """
        st = []
        d = {}
        ans = []
        
        for x in nums:
            while len(st) and st[-1] < x:
                d[st.pop()] = x
            st.append(x)
        
        for y in findNums:
            ans.append(d.get(y,-1))
        return ans

相关文章

网友评论

      本文标题:Day30

      本文链接:https://www.haomeiwen.com/subject/gtfeixtx.html