20:
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stack = []
self.minpoint = []
def push(self, node):
# write code here
if len(self.stack) == 0:
self.minpoint.append(node)
if self.minpoint[-1] > node:
self.minpoint.append(node)
return self.stack.append(node)
def pop(self):
# write code here
result = self.stack.pop()
if result > self.minpoint[-1]:
return result
else:
self.minpoint.pop()
return result
def top(self):
# write code here
return self.stack[-1]
def min(self):
return self.minpoint[-1]
20题如果不用辅助数组可以直接用min函数获得最小值
21:
# -*- coding:utf-8 -*-
class Solution:
def IsPopOrder(self, pushV, popV):
# write code here
if len(pushV) == 0:
return False
stack = []
for i in range(len(pushV)):
stack.append(pushV.pop(0))
while len(stack) != 0 and stack[-1] == popV[0]:
stack.pop()
popV.pop(0)
if len(stack) == 0:
return True
return False
22:
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回从上到下每个节点值列表,例:[1,2,3]
def PrintFromTopToBottom(self, root):
# write code here
result = []
queue = []
if root is None:
return result
queue.append(root)
while len(queue) != 0:
x = queue.pop(0)
result.append(x.val)
if x.left:
queue.append(x.left)
if x.right:
queue.append(x.right)
return result
23:
# -*- coding:utf-8 -*-
class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if len(sequence) == 0:
return False
j = 0
if sequence == sorted(sequence) or sequence == sorted(sequence,reverse = True):
return True
mid = sequence[-1]
sequence.pop()
left = []
right = []
for i in range(len(sequence)):
if sequence[i] > mid:
left = sequence[:i]
right = sequence[i:]
break
for i in range(len(right)):
if right[i] < mid:
return False
if self.VerifySquenceOfBST(left) and self.VerifySquenceOfBST(right):
return True
else:
return False
24:
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def FindPath(self, root, expectNumber):
# write code here
if not root:
return []
result = []
def FindonePath(root,number,path):
number += root.val
path.append(root.val)
isLeaf = root.left == None and root.right == None
if number == expectNumber and isLeaf:
onepath = []
for i in path:
onepath.append(i)
result.append(onepath)
if number < expectNumber:
if root.left:
FindonePath(root.left,number,path)
if root.right:
FindonePath(root.right,number,path)
path.pop()
FindonePath(root,0,[])
return result
25:
# -*- coding:utf-8 -*-
# class RandomListNode:
# def __init__(self, x):
# self.label = x
# self.next = None
# self.random = None
class Solution:
# 返回 RandomListNode
def Clone(self, pHead):
# write code here
nodelabel = []
noderandom = []
node = []
while pHead:
node.append(pHead)
nodelabel.append(pHead.label)
noderandom.append(pHead.random)
pHead = pHead.next
dummy = RandomListNode(0)
pre = dummy
#RandomIndex = map(lambda c: node.index(c) if c else -1,noderandom)
node = map(lambda c: RandomListNode(c),nodelabel)
for i in range(len(node)):
#if RandomIndex[i] != -1:
node[i].random = noderandom[i]#node[RandomIndex[i]]
for i in node:
pre.next = i
pre = pre.next
return dummy.next
26:
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def Convert(self, pRootOfTree):
# write code here
if not pRootOfTree:
return
self.arr = []
self.midTraversal(pRootOfTree)
for i,value in enumerate(self.arr[:-1]):
value.right = self.arr[i+1]
self.arr[i+1].left = value
return self.arr[0]
def midTraversal(self,root):
if not root:
return
self.midTraversal(root.left)
self.arr.append(root)
self.midTraversal(root.right)
27:
这题还是递归做
class Solution:
def Permutation(self, ss):
length = len(ss)
result = []
if length == 0:
return []
if length == 1:
return ss.split()
for i in range(length):
for n in map(lambda c: c + ss[i],self.Permutation(ss[:i]+ss[i+1:])):
if n not in result:
result.append(n)
return sorted(result)
28:
# -*- coding:utf-8 -*-
class Solution:
def MoreThanHalfNum_Solution(self, numbers):
# write code here
length = len(numbers)
half = length / 2
if length == 1:
return numbers[0]
sort = sorted(numbers)
num = 1
for i in range(length-1):
if sort[i] == sort[i + 1]:
num += 1
if (num > half):
return sort[i]
else:
num = 1
return 0
29:
# -*- coding:utf-8 -*-
class Solution:
def GetLeastNumbers_Solution(self, tinput, k):
# write code here
sort = sorted(tinput)
result = []
if len(tinput) < k:
return []
for i in range(k):
result.append(sort[i])
return result
30:
# -*- coding:utf-8 -*-
class Solution:
def FindGreatestSumOfSubArray(self, array):
# write code here
cur = array[0]
result = array[0]
for i in array[1:]:
cur += i
result = max(cur,result)
if cur < 0:
cur = 0
return result