美文网首页
列表的用法

列表的用法

作者: 腹黑君 | 来源:发表于2021-07-21 19:55 被阅读0次

1. 列表的定义

先进先出(FIFO)

2. 用法

类代码如下:

class Queue:
    def __init__(self):
        self.items = []

    def enqueue(self, item):
        self.items.insert(0, item)

    def pop(self):
        return self.items.pop()

    def size(self):
        return len(self.items)

    def is_empty(self):
        return self.items == []

3. 算法运用

① 约瑟夫环
剑指offer62

    def __init__(self):
        self.items = []

    def enqueue(self, item):
        self.items.insert(0, item)

    def dequeue(self):
        return self.items.pop()

    def size(self):
        return len(self.items)

    def is_empty(self):
        return self.items == []

# num为传递的次数,每隔一个人就是传递1次
class Solution:
    def lastRemaining(self, n: int, num = 2) -> int:
        lst = Queue()
        for i in range(n):
            lst.enqueue(i)
        while lst.size() >1:
            for i in range(num):
                lst.enqueue(lst.dequeue())
            lst.dequeue()
        return lst.dequeue()

先按头消去,每隔一个消去;再从第二个每隔一个消去
【1,2,3,4,5,6】→【2,4,6】→【2,6】→【6】
这种方法代码如下:

class Queue:
    def __init__(self):
        self.items = []

    def enqueue(self, item):
        self.items.insert(0, item)

    def dequeue(self):
        return self.items.pop()

    def size(self):
        return len(self.items)

    def is_empty(self):
        return self.items == []

# num为传递的次数,每隔一个人就是传递1次
class Solution:
    def lastRemaining(self, n: int, num = 1) -> int:
        lst = Queue()
        flag = 0
        for i in range(1, n+1):
            lst.enqueue(i)
        mark = lst.size() % 2
        while lst.size() // 2 > 0:
            if flag == 0:
                lst.dequeue()
                for i in range(lst.size()//2):
                    for j in range(num):
                        lst.enqueue(lst.dequeue())
                    lst.dequeue()

                flag = 1
                if mark == 0:
                    lst.enqueue(lst.dequeue())
            else:
                for i in range(lst.size()//2):
                    for j in range(num):
                        lst.enqueue(lst.dequeue())
                    lst.dequeue()
                    
                flag = 0
                if mark == 0:
                    lst.enqueue(lst.dequeue())
                    
        return lst.dequeue()

LeetCode 390. 消除游戏

#采用队列和栈的思想,不过虽然超时,但是是正确的。
class Queue:
    def __init__(self):
        self.items = []

    def enqueue(self, item):
        self.items.insert(0, item)

    def dequeue(self):
        return self.items.pop()

    def size(self):
        return len(self.items)

    def is_empty(self):
        return self.items == []

# num为传递的次数,每隔一个人就是传递1次
class Solution:
    def lastRemaining(self, n: int, num = 1) -> int:
        lst = Queue()
        flag = 0
        for i in range(1, n+1):
            lst.enqueue(i)
        
        while lst.size() // 2 > 0:
            mark = lst.size() % 2
            if flag == 0:
                lst.dequeue()
                for i in range(lst.size()//2):
                    for j in range(num):
                        lst.enqueue(lst.dequeue())
                    lst.dequeue()

                flag = 1
                if mark == 0:
                    lst.enqueue(lst.dequeue())

            else:
                lst.items.pop(0)
                for i in range(lst.size()//2):
                    for j in range(num):
                        lst.items.append(lst.items.pop(0))
                    lst.items.pop(0)
                flag = 0
                if mark == 0:
                    lst.items.append(lst.items.pop(0))
                
        return lst.dequeue()

4 双向队列

两边可以加东西与减东西


image.png

python有双向队列的库,可以直接导入:

from collections import deque
image.png

题目:

  1. LeetCode 239:双向队列
class Solution:
    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
        res = []
        from collections import deque
        queue = deque()
        for i in range(len(nums)):
            if queue and queue[0] < i-k+1:
                queue.popleft()
            while queue and nums[queue[-1]] < nums[i]:
                queue.pop()
            queue.append(i)
            
            if i >= k-1:
                res.append(nums[queue[0]])
        
        return res
  1. Leetcode 9. Palindrome Number
class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0:
            return False
        if x == 0:
            return True
        
        res = deque()
        for i in str(x):
            res.append(i)
            
        mark = True
        
        while len(res) > 1 and mark is True:
            if res.pop() != res.popleft():
                mark = False
        
        return mark

相关文章

  • MarkDown用法

    Markdown 用法 标题 一级标题 三级标题 六级标题 最小标题 列表用法 无序列表 有序列表 有序列表 插入...

  • 列表的用法

    1. 列表的定义 先进先出(FIFO) 2. 用法 类代码如下: 3. 算法运用 ① 约瑟夫环剑指offer62 ...

  • eyoucms list 列表数据标签

    [基础用法] 名称:list 功能:获取列表模板中的列表内容。 语法: {eyou:list pagesize='...

  • python 列表用法

    a =["zhangshan","lis","ww","dfad","asdfd"] """ 在python的使用...

  • Python列表用法

    列表基础 创建列表 创建一个空列表 创建一个含有元素的列表 创建一个多类型元素列表 创建嵌套列表 访问元素列表访问...

  • ol -ul

    本质区别: ol:有序列表 ul:无序列表 用法: ol和ul的用法是一样的,都是外层标签内套li标签。如下: 效...

  • 用HTML来写列表

    考虑用html如何实现以下列表: 要实现的是有序列表和无序列表以及嵌套列表的结合 有序列表: 定义和用法: ...

  • 表格绘制_附件_代码

    用法举例:|id||:-:||1||2|id12 壹列表格 俩列表格 叁列表格 肆列表格 伍列表格 陆列表格 柒列...

  • python中的列表解析

    列表是python中最为重要的数据结构,利用列表解析方法可以快速生成列表。用法举例 a = [x ** 2 for...

  • eyoucms attribute 栏目属性列表

    attribute 栏目属性列表 [基础用法] 名称:attribute 功能:获取栏目的属性列表,或者单独获取某...

网友评论

      本文标题:列表的用法

      本文链接:https://www.haomeiwen.com/subject/upxsmltx.html