剑指offer习题20-30

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



猜你喜欢

转载自blog.csdn.net/u012693077/article/details/80809129