牛客——模拟

1.旋转数组

在这里插入图片描述
在这里插入图片描述
没有那么复杂,直接就取一截就行,但是比较重要的就是需要考虑到m>n的情况,需要通过取余来使得他更简单一点。

class Solution:
    def solve(self , n: int, m: int, a: List[int]) -> List[int]:
        # write code here
        m=m%n
        b=a[n-m:]
        c=a[:n-m]
        b.extend(c)
        return b

2.螺旋矩阵

在这里插入图片描述
这个就是旋转着把矩阵输成一个向量
在这里插入图片描述

class Solution:
    def spiralOrder(self , matrix: List[List[int]]) -> List[int]:
        # write code here
        res =[]
        if not matrix:
            return res
        top = 0
        left = 0
        right = len(matrix[0])-1
        bottom = len(matrix)-1
        while left <= right and top <=bottom:
            for x in range(left,right+1):
                res.append(matrix[top][x])
            for x in range(top+1,bottom+1):
                res.append(matrix[x][right])
            for x in range(right-1,left-1,-1):
                if not top == bottom:
                    res.append(matrix[bottom][x])
            for x in range(bottom-1,top,-1):
                if not left == right:
                    res.append(matrix[x][left])
            top += 1
            bottom -= 1
            left += 1
            right -= 1
        return res

上面的这个方法在视频里也讲过。
不符合题意的解法

class Solution:
    def spiralOrder(self , matrix ):
        # write code here
        res = []
        while matrix:
            #弹出第1行并和之前的结果列表相加
            res += list(matrix.pop(0))
            #将剩余的列表逆时针旋转90度,先对矩阵解包,然后进行zip打包得到一个元组序列,
            #再将元组序列变成列表,最后从后向前取就得到矩阵的旋转90度结果
            matrix =  list(zip(*matrix))[-1::-1]
        return res

3.顺时针旋转矩阵

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

class Solution:
    def rotateMatrix(self , mat: List[List[int]], n: int) -> List[List[int]]:
        # write code here
        final = []
        res = list(reversed(mat))
        for i in range(n):
            tmp = []
            for k in range(n):
                tmp.append(res[k][i])
            final.append(tmp)
        return final

一个白痴方法

class Solution:
    def rotateMatrix(self , mat: List[List[int]], n: int) -> List[List[int]]:
        # write code here
         return [x[::-1] for x in zip(*mat)]

4.设计LRU缓存结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一点没看

class Solution:

    def __init__(self, capacity: int):
        # write code here
        self.capacity = capacity
        self.nums = {}
        self.lru = []

    def get(self, key: int) -> int:
        # write code here
        val = '-1'
        if key in self.nums:
            val = self.nums[key]
            self.lru.remove(key)
            self.lru.append(key)
        return val

    def set(self, key: int, value: int) -> None:
        # write code here
        if len(self.lru) == self.capacity:
            self.nums.pop(self.lru[0])
            del self.lru[0]
        self.nums[key] = value
        self.lru.append(key)
         

# Your Solution object will be instantiated and called as such:
# solution = Solution(capacity)
# output = solution.get(key)
# solution.set(key,value)

5.设计LFU缓存结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from collections import OrderedDict,defaultdict
class Solution:
    def LFU(self , operators: List[List[int]], k: int) -> List[int]:
        # write code here
        self.freq=defaultdict(OrderedDict)#{freq:{key:value}}有序字典,存顺序
        self.key_to_freq={}
        self.k=k
        self.min_freq=0
        self.out=[]
        for op in operators:
            if op[0]==1:
                self.set(op[1],op[2])
            else:
                self.out.append(self.get(op[1]))
        return self.out
    def set(self,key,value):
        if self.k==0:return
        if key in self.key_to_freq:
            key_freq=self.key_to_freq[key]
            self.freq[key_freq].pop(key)
            if not self.freq[key_freq] and key_freq==self.min_freq:
                self.min_freq+=1
            self.freq[key_freq+1][key]=value
            self.key_to_freq[key]=key_freq+1
        else:
            if len(self.key_to_freq)==self.k:
                k,v=self.freq[self.min_freq].popitem(last=False)
                self.key_to_freq.pop(k)
            self.key_to_freq[key]=1
            self.freq[1][key]=value
            self.min_freq=1
    def get(self,key):
        if key not in self.key_to_freq:return -1
        key_freq=self.key_to_freq[key]
        value=self.freq[key_freq][key]
        self.freq[key_freq].pop(key)
        if not self.freq[key_freq] and key_freq==self.min_freq:
                self.min_freq+=1
        self.freq[key_freq+1][key]=value
        self.key_to_freq[key]=key_freq+1
        return value
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值