栈2

作者: Arsenal4ever | 来源:发表于2020-01-08 14:04 被阅读0次

继续刷栈!!!

leetcode 496 下一个更大的元素I

维护一个栈,当下一个元素比栈顶大时,出栈直到栈顶大于该元素。

不够 pythonic解法:

class Solution(object):
    def nextGreaterElement(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        if not nums1 or not nums2:
            return
        stack = []
        hashMap = {}
        result = []
        for num in nums2:
            if not stack:
                stack.append(num)
                continue
            while stack and num > stack[-1]:
                hashMap[stack.pop()] = num
            stack.append(num)

        for num in nums1:
            if num in hashMap:
                result.append(hashMap[num])
            else:
                result.append(-1)

        return result

pythonic解法:

class Solution(object):
    def nextGreaterElement(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        if not nums1 or not nums2:
            return
        stack = []
        hashMap = {}
        result = []
        for num in nums2:
            while stack and num > stack[-1]:
                hashMap[stack.pop()] = num
            stack.append(num)

        return [hashMap.get(i, -1) for i in nums1]

leetcode 503 下一个更大的元素II

返回数组格式固定。维护一个栈,不放数字放下标,找到下标后放到待返回的数组!

class Solution(object):
    def nextGreaterElements(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        double_nums = nums + nums
        stack = []
        result = [-1] * len(nums)
        for index, num in enumerate(double_nums):
            while stack and num > nums[stack[-1]]:
                result[stack.pop()] = num
            if index < len(nums):
                stack.append(index)
        return result

leetcode 682 棒球比赛

这题就比较简单了,不过我好像写复杂了,不需要每步计算ans,直接最后求栈的和就可以了。好像动态规划也行

class Solution(object):
    def calPoints(self, ops):
        """
        :type ops: List[str]
        :rtype: int
        """
        ans = 0
        stack = []
        for i in ops:
            if i.isdigit() or i.startswith("-"):
                ans += int(i)
                stack.append(int(i))
            elif i == "C":
                ans -= stack[-1]
                stack.pop()
            elif i == "D":
                t = stack[-1] * 2
                ans += t
                stack.append(t)
            elif i == "+":
                t = stack[-1] + stack[-2]
                ans += t
                stack.append(t)
        return ans
class Solution(object):
    def calPoints(self, ops):
        """
        :type ops: List[str]
        :rtype: int
        """
        stack = []
        for i in ops:
            if i.isdigit() or i.startswith("-"):
                stack.append(int(i))
            elif i == "C":
                stack.pop()
            elif i == "D":
                t = stack[-1] * 2
                stack.append(t)
            elif i == "+":
                t = stack[-1] + stack[-2]
                stack.append(t)
        return sum(stack)

leetcode 636 线程独占的时间

老思路,先生成结果,然后将多运行的时间减去。

class Solution(object):
    def exclusiveTime(self, n, logs):
        """
        :type n: int
        :type logs: List[str]
        :rtype: List[int]
        """
        logsHelp = [(int(i.split(':')[0]), i.split(':')[1], int(i.split(':')[2])) for i in logs]
        result = [0] * n
        stack = []
        for log in logsHelp:
            if log[1] == "start":
                stack.append(log)
            else:
                t = stack.pop()
                time = log[2] - t[2] + 1
                n = t[0]
                result[n] += time
                if stack:
                    result[stack[-1][0]] -= time
        return result

相关文章

  • 递归累加数组

    入栈 5入栈 4入栈 3入栈 2入栈 1出栈 [1 0]出栈 [2 1 0]出栈 [3 2 1 0]出栈 [4 3...

  • struts2值栈

    1.对象栈(root栈) 2.Map栈。

  • 用递归函数和栈操作逆序栈

    一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底为1、2、...

  • 5.栈Stack

    目录:1.栈的定义2.栈的图解3.栈定义操作4.栈的实现 1. 栈的定义 2. 栈的图解 3. "栈"定义的操作 ...

  • 1.栈的结构 2.栈的特点 1.先进后出;2.只能在栈顶压栈和出栈;3.top永远指向栈顶元素。 3.栈的顺序实现...

  • 数据结构之 栈

    栈结构 链式栈 一.栈结构体 1构建空栈 2栈置空 3判断栈空 4获取栈顶 5入栈 6出栈 7便利栈 二.链式栈 ...

  • 如何仅用递归函数和栈操作逆序一个栈

    【题目】 一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底...

  • 用递归函数和栈操作逆序一个栈

    题目描述 一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底...

  • 如何仅仅用递归函数和栈操作逆序一个栈

    题目描述 一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底...

  • 仅用递归函数和栈操作逆序一个栈[c++]

    【题目】一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底为...

网友评论

    本文标题:栈2

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