zoukankan      html  css  js  c++  java
  • 算法面试题整理

     1、python反转字符串

    '''第一种:使用字符串切片'''
    s = 'Hello World'
    print(s[::-1])  # dlroW olleH
    
    '''第二种:使用列表的reverse方法'''
    l = list(s)
    l.reverse()
    print( "".join(l) )   # dlroW olleH
    
    '''第三种:使用reduce'''
    from functools import reduce
    result = reduce(lambda x,y:y+x,s)
    print( result )      # dlroW olleH

    2. 用两个栈实现一个队列

        注:栈后进先出,列表先进先出, 使用两个栈模拟列队列未被插入元素和删除队列头

      1、实现方法

        1)使用stack1模拟队列尾部追加元素

            1. 只要追加元素直接加入stack1这个栈即可

        2)使用stack2模拟删除队首元素

            1. 当第一次删除时,stack2肯定为空,那么将stack1中元素依次出栈,加入stack2中

            2. 那么stack2中栈顶元素即是stack1中以前的栈底元素(队列头),stack1为空

            3. 当第二次删除时首先会判断stack2是否为空,如果不为空,直接删除stack2的栈顶元素即为队列头部元素

            4. 如果stack2为空,再次将stack1中元素依次加入stack2中

    class CQueue:
        def __init__(self):
            self.stack1 = []
            self.stack2 = []
    
        def append_tail(self, elem):
            self.stack1.append(elem)
    
        def delete_head(self):
            if not self.stack2:  # 如果stack2为空就将stack1中的元素依次如stack2的栈,stack2就可以模拟这个列表了
                if self.stack1:
                    while self.stack1:
                        elem = self.stack1.pop()
                        self.stack2.append(elem)
                else:
                    raise Exception("Queue is empty.")
            elem = self.stack2.pop()  # 只要stack2不为空,stack2栈顶元素即是队首元素
            return elem
    
    
    if __name__ == '__main__':
        que = CQueue()
        que.append_tail(1)
        que.append_tail(2)
        que.append_tail(3)
        print que.delete_head()  # 1
        que.append_tail(4)
    '''模拟 1 2 3 加入对了,然后3出对了,然后4加入队列过程'''
    # 第一步:1 2 3 加入队列
    '''
    stack1 = [1,2,3]
    '''
    
    # 第二步:删除队列头部元素
    '''
    1) 将stack1中元素依次出栈放入stack2中
    stack1 = []
    stack2 = [3,2,1]
    删除队列首部元素即删除stack2栈顶元素: stack2 = [3,2]
    '''
    
    # 第三步:将4加入队列
    '''
    stack1 = [4]
    stack2 = [3,2]
    # 如果再次删除队列头部,就直接删除stack2栈顶元素,直到stack2为空,再次将stack1中元素出栈放入stack2即可
    '''

     

    3.使用yield生成器生成斐波拉契函数

    def fib(max_num):
        a,b = 1,1
        while a < max_num:
            yield b
            a,b=b,a+b
    
    g = fib(10)               #生成一个生成器:[1,2, 3, 5, 8, 13]
    print(g.__next__())       #第一次调用返回:1
    print(list(g))            #把剩下元素变成列表:[2, 3, 5, 8, 13]
    复制代码
    '''模拟 1 2 3 加入对了,然后3出对了,然后4加入队列过程'''
    # 第一步:1 2 3 加入队列
    '''
    stack1 = [1,2,3]
    '''
    
    # 第二步:删除队列头部元素
    '''
    1) 将stack1中元素依次出栈放入stack2中
    stack1 = []
    stack2 = [3,2,1]
    删除队列首部元素即删除stack2栈顶元素: stack2 = [3,2]
    '''
    
    # 第三步:将4加入队列
    '''
    stack1 = [4]
    stack2 = [3,2]
    # 如果再次删除队列头部,就直接删除stack2栈顶元素,直到stack2为空,再次将stack1中元素出栈放入stack2即可
    '''
  • 相关阅读:
    java处理特殊时间格式,2019-11-28T06:52:09.724+0000 转为常见格式2019-11-28 06:52:09,同时转为数据库日期格式Timestamp
    最近比较忙,处理项目上各种问题。此时有新任务来临,赶时间记录一个方法,加深对数组的理解
    springboot项目通过gradle运用capsule插件打可执行jar包
    HanLP 关键词提取。总结
    mmdet阅读笔记
    mmcv阅读笔记
    Monocular Real-time Hand Shape and Motion Capture using Multi-modal Data
    3D Hand Shape and Pose from Images in the Wild
    End to end recovery of human shape and pose
    工作小结五
  • 原文地址:https://www.cnblogs.com/guohad/p/13253446.html
Copyright © 2011-2022 走看看