Python 刷栈 leetcode简单题有感
特殊的单调栈问题,尤其要清晰明白题目需要的是递增栈还是递减栈,以下标入栈容易理解,栈的出栈条件要搞清楚,出栈的下标也要利用
下一个更大元素 I,
class Solution(object): def nextGreaterElement(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: List[int] """ n2 = len(nums2) ans1 = [-1]*n2 stack = [] for i in range(n2): while stack and nums2[i] > nums2[stack[-1]]: g = stack.pop() ans1[g] = nums2[i] stack.append(i) dt = dict() for i in range(n2): dt[nums2[i]] = ans1[i] ans2 = [] for i in nums1: ans2.append(dt[i]) return ans2
商品折扣后的最终价格
class Solution(object): def finalPrices(self, prices): """ :type prices: List[int] :rtype: List[int] """ n = len(prices) stack = [] res = prices for j in range(n): while stack and prices[j] <= prices[stack[-1]] : i = stack.pop() res[i] = prices[i] - prices[j] stack.append(j) return res
普通栈问题
删除字符串中的所有相邻重复项
class Solution(object): def removeDuplicates(self, s): """ :type s: str :rtype: str """ stack = [] for i in s: if stack and stack[-1] == i: stack.pop() else: stack.append(i) return .join(i for i in stack)