Day30

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

  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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • --------------------购物车------------- el不会报空指针,会自动检测 map键值...
    路人爱早茶阅读 184评论 0 0
  • 今天才听了周三朱老师分享的时间管理复盘课程!震惊到了!最近自己工作一忙就开始找借口,开始代谢了,还给组长带来麻烦...
    刘丽_99ef阅读 195评论 0 0
  • 面条起源于中国北方,从一开始的清汤挂面到后来的五花八门,无一不像人们表明了,我华夏民族对面条的热爱。 早上来一碗面...
    不歪小姐阅读 400评论 0 1
  • 超喜欢小红娘片尾曲《东流》中的一句话, “若此情赋予东流兮,不予逃避。” 像极了张爱玲写过的一句话, “爱就爱了,...
    卷卷卷卷云阅读 151评论 6 2
  • 如果,我不在了。那些我曾经爱过的人啊。请你们好好爱自己吧!我依然会在自己的世界里爱着你们。 如果,我不在了。妈妈,...
    失心人只求知心人阅读 207评论 0 4