zoukankan      html  css  js  c++  java
  • 剑指Offer-Python(1-5)

    1、二维数组的查找

    查找,其实就可以挨个进行比较就可以。又由于题目说明(每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序),因此如果利用类似于二分查找的方法,那么比较次数则会更少。代码中以第一行最后一列的元素作为第一个比较的元素,比目标元素大则按行往左找,比目标元素小则按列往下找,直到找到或者下标溢出。

    def Find(target, array):
        # write code here
        row = len(array)
        col = len(array[0])
        i = 0
        j = col - 1
        while i < row and j >= 0:
            if target < array[i][j]:
                j = j - 1
            elif target > array[i][j]:
                i = i + 1
            else:
                return True
        return False
    
    
    array = [[1, 2, 8, 9], [2, 4, 9, 12], [4, 7, 10, 13], [6, 8, 11, 15]]
    target = 7
    # row = len(array)
    # col = len(array[0])
    # print(row, "  ", col)
    print(Find(target, array))

    2、替换空格

    def replaceSpace(s):
        t = s.replace(' ', '%20')
        return t
    
    s = "We Are Happy"
    print(replaceSpace(s))

    3、从头到尾打印链表

    # -*- coding:utf-8 -*-
    class ListNode:
        def __init__(self, x):
            self.val = x
            self.next = None
    
    
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(listNode):
        l = []
        while listNode:
            l.append(listNode.val)
            listNode = listNode.next
        l.reverse()
        return l
    
    
    l1 = ListNode(1)
    l2 = ListNode(2)
    l3 = ListNode(3)
    l1.next = l2
    l2.next = l3
    l3.next = None
    
    l = printListFromTailToHead(l1)
    print(l)

    4、重建二叉树

    递归实现

    # -*- coding:utf-8 -*-
    class TreeNode:
        def __init__(self, x):
            self.val = x
            self.left = None
            self.right = None
    
    
    class Solution:
        # 返回构造的TreeNode根节点
        def reConstructBinaryTree(self, pre, tin):
            # write code here
            if len(pre) == 0:
                return None
            elif len(pre) == 1:
                return TreeNode(pre[0])
            else:
                head = TreeNode(pre[0])
                head.left = self.reConstructBinaryTree(pre[1:tin.index(pre[0]) + 1], tin[0:tin.index(pre[0])])
                head.right = self.reConstructBinaryTree(pre[tin.index(pre[0]) + 1:], tin[tin.index(pre[0]) + 1:])
                return head
    
    
    if __name__ == '__main__':
        s = Solution()
        pre = [1, 2, 4, 7, 3, 5, 6, 8]
        tin = [4, 7, 2, 1, 5, 3, 8, 6]
        ans = s.reConstructBinaryTree(pre, tin)
        print(ans.right.val)

    5、用两个栈实现队列

    栈:先进后出;队列:先进先出

    用两个栈s1,s2实现队列,s1负责进队列,s2负责出队列。进队:进s1即可。出队:若s1,s2都为空,则队列为空;若s2不为空,则直接取s2最后一个元素;若s2为空,则把s1内元素按从尾到头依次放入s2,再取s2最后一个元素。

    # -*- coding:utf-8 -*-
    class Solution:
        def __init__(self):
            self.Stack1 = []
            self.Stack2 = []
    
        def push(self, node):
            # write code here
            self.Stack1.append(node)
    
        def pop(self):
            # return xx
            if not self.Stack2 and not self.Stack1:
                return
            if self.Stack2:
                return self.Stack2.pop()
            else:
                while self.Stack1:
                    self.Stack2.append(self.Stack1.pop())
                return self.Stack2.pop()
    
    
    s = Solution()
    s.push(1)
    s.push(2)
    s.push(3)
    print(s.pop())
    s.push(4)
    s.push(5)
    print(s.pop())
    print(s.pop())
    print(s.pop())
    print(s.pop())
    print(s.pop())

     

  • 相关阅读:
    linux下shell显示-bash-4.1#不显示路径解决方法
    update chnroute
    An error "Host key verification failed" when you connect to other computer by OSX SSH
    使用dig查询dns解析
    DNS被污染后
    TunnelBroker for EdgeRouter 后记
    mdadm详细使用手册
    关于尼康黄的原因
    Panda3d code in github
    Python实例浅谈之三Python与C/C++相互调用
  • 原文地址:https://www.cnblogs.com/dong973711/p/11960289.html
Copyright © 2011-2022 走看看