- Linked List Cycle
**思路:判斷是不是循環(huán)鏈表?不等價于判斷鏈表里是否有環(huán)漩怎?
前一個問題:最后一點結(jié)點是否指向頭結(jié)點。后一個問題:只要中間有一個重復出現(xiàn)了就是有環(huán)嗦嗡。但是用了額外的空間來存儲勋锤。
class Solution(object):
def hasCycle(self, head):
"""
:type head: ListNode
:rtype: bool
"""
if head == None or head.next == None:
return False
slow= fast = head
while fast and fast.next :
slow = slow.next
fast = fast.next.next
if slow == fast:
return True
return False
-
Min Stack
**思路:好難!=募馈H础茄厘!采用minstack和stack一樣長度的方式來存儲,這樣可以簡化pop()部分的代碼谈宛。
class MinStack(object):
def __init__(self):
"""
initialize your data structure here.
"""
self.stack = []
self.mins = []
def push(self, x):
"""
:type x: int
:rtype: void
"""
min_val = self.getMin()
if min_val==None or min_val>x:
min_val = x
self.mins.append(min_val)
self.stack.append(x)
def pop(self):
"""
:rtype: void
"""
self.mins.pop()
return self.stack.pop()
def top(self):
"""
:rtype: void
"""
return self.stack[-1]
def getMin(self):
"""
:rtype: void
"""
if len(self.mins) == 0:
return None
return self.mins[-1]