zoukankan      html  css  js  c++  java
  • LeetCode每周记录-8

    给出一个无序数组,找出缺失的最小正整数。思路是先对数组进行排序,然后遍历数组,从第一个正整数开始与currNum=1对比,相同则currNum加1继续遍历,不相同则返回currNum为答案。代码:

    class Solution(object):
        def firstMissingPositive(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            if not nums:
                return 1
            nums = list(set(nums))
            nums.sort()
            currNum = 1
            for num in nums:
                if num > 0:
                    if num != currNum:
                        return currNum
                    else:
                        currNum += 1
            return currNum

    给出一个数组,代表如图黑色方格所示的“砖块”,求这些“砖块”组成的凹槽能盛的水量(蓝色方格所示)。联想到之前做过的一个水桶最大容量问题,采取相似的办法:两个指针q、p从首尾分别开始向中间进行遍历,并由两个变量maxLeft、maxRight记录当前左边的最高“砖块”和右边的最高“砖块”,比较q、p所指的高度,高度低的那一方向中间移动一格;每次进行移动的指针,获取其当前代表的高度h,若 h < maxLeft 并且 h < maxRight ,则水量v增加 min(maxLeft, maxRight) - h ;然后再由q、p所指的高度判断是否要更新maxLeft和maxRight。代码:

    class Solution(object):
        def trap(self, height):
            """
            :type height: List[int]
            :rtype: int
            """
            if not height:
                return 0
            q = 0
            p = len(height) - 1
            maxLeft = height[q]
            maxRight = height[p]
            v = 0
            while(p > q):
                _p = height[p]
                _q = height[q]
                if _p < _q:
                    if _p < maxRight and _p < maxLeft:
                        v += (min(maxRight, maxLeft) - _p)
                    p -= 1
                else:
                    if _q < maxLeft and _q < maxRight:
                        v += (min(maxRight, maxLeft) - _q)
                    q += 1
                if _p > maxRight:
                    maxRight = _p
                if _q > maxLeft:
                    maxLeft = _q
            return v

    给出两个字符串,算出这两个字符串代表的数字相乘的结果(不能直接使用内置的字符串转数字功能)。思路是先把两个字符串转换为数字:从个位开始,i = 1,通过建立的转换表map得到数字num,总数字加上num * i,然后i *= 10,进入十位…… 转换完成之后将两个数相乘即可。代码:

    class Solution(object):
        def multiply(self, num1, num2):
            """
            :type num1: str
            :type num2: str
            :rtype: str
            """
            str_num_map = {str(i): i for i in range(10)}
            def convertToNum(str_input):
                i, currNum = 1, 0
                for letter in reversed(str_input):
                    currNum += str_num_map[letter] * i
                    i *= 10
                return currNum
            return str(convertToNum(num1) * convertToNum(num2))

    跳跃游戏,给出一个数组,数组的每个数代表从当前位置可以向后跳跃的步数,求出最少需要多少步即可跳跃至数组最后一位。思路是将这个问题拆分成一个一个的跳跃小游戏,假设数组是nums,先找出离终点最远并且可以一步跳跃至终点的位置index,然后对nums[0:index + 1]进行再跳跃问题求解即可;并且在遍历的时候可以将当前位置可以到达的位置进行存储,记录下每个位置 - 能一步到达该位置的最小index。这样当进行再跳跃时,如果目标已经有存储的最优解,便可以直接返回。代码:

    class Solution(object):
        def jump(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            if len(nums) <= 1:
                return 0
            best = [None for i in range(len(nums))]
            steps = 0
            while(1):          
                totalLength = len(nums) - 1
                if best[totalLength] != None:
                    currIndex = best[totalLength]
                else:
                    for index, num in enumerate(nums):
                        if index + num >= totalLength:
                            currIndex = index
                            break
                        else:
                            for i in range(index + 1, index + num + 1):
                                if best[i] == None or index < best[i]:
                                    best[i] = index
                steps += 1
                if currIndex == 0:
                    return steps
                else:
                    nums = nums[0:currIndex + 1]
  • 相关阅读:
    页面模板
    HTML,CSS,JaveScript
    TCP三次握手
    BLDC无刷直流电机的原理及驱动基础
    调试日志——基于stm32的智能声光报警器(三)
    调试日志——基于stm32的智能声光报警器(二)
    调试日志——基于stm32的智能声光报警器(一)
    Jlink-10 pin 的定义(stm32使用)官方定义
    关于学习新知识的一点想法
    前端笔记-javaScript-3
  • 原文地址:https://www.cnblogs.com/HorribleMe/p/12861082.html
Copyright © 2011-2022 走看看