数据结构(某些题) python

题目:二维数组中,每行从左到右递增,每列从上到下递增,给出一个数,判断它是否在数组中

def find_integer(matrix, num):
    if not matrix:
        return False
    rows, cosl = len(matrix), len(matrix[0])
    row, col = rows-1, 0
    while row>=0 and col < cols:
        if matrix[row][col] == num:
            return True
        elif matrix[row][col] < num:
            col+=1
        else:
            row-=1
    return False

题目:把字符串中的空格替换成'20%'

print(input().replace(" ", "20%"))

题目:从尾到头打印单链表 

def print_link_recursion(links):
    if links:
        print_link_recursion(links.next)
        print links.val

题目:重建二叉树

def construct_tree(preorder=None, inorder=None):
    """
    构建二叉树
    """
    if not preorder or not inorder:
        return None
    index = inorder.index(preorder[0])
    left = inorder[0:index]
    right = inorder[index+1:]
    root = TreeNode(preorder[0])
    root.left = construct_tree(preorder[1:1+len(left)], left)
    root.right = construct_tree(preorder[-len(right):], right)
    return root

题目:两个栈实现队列

class my_queue(object):
    def __init__(self):
        self.stack = []
        self.stack2 = []
    def push(self, val):
        self.stack.append(val)
    def pop(self):
        if self.stack2:
            return self.stack2.pop()
        while self.stack:
            self.stack2.append(self.stack.pop())
        return self.stack2.pop() if self.stack2 else u'队列为空'

题目:把递增数组的前面部分数字移到队尾,求数组中的最小值,例如[3,4,5,6,1,2]

def find_min(nums):
    if not nums:
        return False
    length=len(nums)
    left, right = 0, length
    while nums[left] >= nums[right]:
        if right - left == 1:
            return nums[right]
        mid = (left + right)/2
        if nums[left] == nums[right] == nums[mid]:
            return min(nums)
        if nums[left] <= nums[mid]:
            left = mid
        if nums[right] >= nums[mid]:
            right = mid
    return nums[0]

题目:斐波那契数列

def fib(nums):
    a, b = 0, 1
    for i in range(nums):
        yield b
        a, b = b, a+b
        

题目:二进制中的1

def num_of_1(n):
    ret = 0
    while n:
        ret += 1
        n = n & n-1
    return ret

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值