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