牛客网刷题笔记131111 Python实现LRU+二叉树先中后序打印+SQL并列排序

从学校步入职场一年多,已经很久没刷过题了,为后续稍微做些提前的准备,还是重新开始刷刷题。
从未做过计划表,这回倒是做了个计划表,希望能坚持吧。
刷题比较随性且量级不大,今天就写了2个算法+2个sql,sql感觉都相对简单且题库没什么好写的,后续考虑将sql的刷题计划改为对理论知识的回温。

算法题牛客网NC93 LRU实现

题目如下:

设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为 capacity ,操作次数是 n ,并有如下功能:
1、Solution(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存
2、get(key):如果关键字 key 存在于缓存中,则返回key对应的value值,否则返回 -1 。
3、set(key, value):将记录(key, value)插入该结构,如果关键字 key 已经存在,则变更其数据值 value,如果不存在,则向缓存中插入该组 key-value ,如果key-value的数量超过capacity,弹出最久未使用的key-value。
要求get跟set的时间复杂度只能为O(1)。

虽然很久没刷题,但好像没有以前那种从未刷过题第一次写不知从何下手的感觉,倒是很顺畅地就写出来了。写完看了一下以往写过的历史记录,发现以前也写过这道题只是题目有所变动,但感觉现在写的更加简洁易懂一些。思路如下:

题目要求写一个LRU的缓存结构,最直接的想法就是用一个字典作为载体,对get与set进行对应的配置:
1、get():每次get操作,如果字典中存在key值,先将value取出后进行删键操作,再重新插入key值进行赋值,同时返回value;若不存在直接返回-1即可。这样子可以保证只要触发get操作,这个key值也会是最近被用过的。
2、set():分为三种情况处理
1)存在key值,与get操作类似,先删键再重新赋值;
2)不存在key值,但字典大小未超过缓存容量要求,这种最简单直接插入新的键值;
3)不存在key值,且字典大小超过缓存容量要求,这种要处理也很容易,取出字典最早,也就是最久没有被用到的键进行删除,可以通过将键值取成列表后取第一个来解决,然后再插入新键值。

代码:

class Solution:

    def __init__(self, capacity: int):
        # write code here
        self.capacity = capacity
        self.result = dict()

    def get(self, key: int) -> int:
        # write code here
        if key in self.result.keys():
            output = self.result[key]
            del self.result[key]
            self.result[key] = output
            return output
        else:
            return -1

    def set(self, key: int, value: int) -> None:
        # write code here
        if key in self.result.keys():
            ## key值存在,移除后重新插入
            del self.result[key]
            self.result[key] = value
        elif len(self.result.keys()) < self.capacity:
            ## 缓存大小未超过容量的情况下,插入赋值
            self.result[key] = value
        else:
            ## key值不存在且缓存大小超过容量
            # self.result.popitem()
            del_key = list(self.result.keys())[0]
            del self.result[del_key]
            self.result[key] = value
        # print(list(self.result.keys()))
            
# Your Solution object will be instantiated and called as such:
# solution = Solution(capacity)
# output = solution.get(key)
# solution.set(key,value)

算法题牛客网NC45 二叉树先中后序打印

这个题其实写过,题目还是比较简单的,思路就是直接按先序、中序、后序的需求取值即可。题目如下:

给定一棵二叉树,分别按照二叉树先序,中序和后序打印所有的节点。
数据范围: n ∈ [ 0 , 1000 ] n\in[0,1000] n[0,1000],树上每个节点的val值满足#val\in[0,100]#
要求:空间复杂度O(n),时间复杂度O(n)

代码:

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param root TreeNode类 the root of binary tree
# @return int整型二维数组
#
class Solution:
    def threeOrders(self , root: TreeNode) -> List[List[int]]:
        # write code here
        preList = []
        midList = []
        lastList = []
        def preOrder(curNode, leftNode, rightNode):
            if curNode:
                preList.append(curNode.val)
            if leftNode:
                preOrder(leftNode, leftNode.left, leftNode.right)
            if rightNode:
                preOrder(rightNode, rightNode.left, rightNode.right)
        
        def midOrder(curNode, leftNode, rightNode):
            if leftNode:
                midOrder(leftNode, leftNode.left, leftNode.right)
            if curNode:
                midList.append(curNode.val)
            if rightNode:
                midOrder(rightNode, rightNode.left, rightNode.right)
        
        def lastOrder(curNode, leftNode, rightNode):
            if leftNode:
                lastOrder(leftNode, leftNode.left, leftNode.right)
            if rightNode:
                lastOrder(rightNode, rightNode.left, rightNode.right)
            if curNode:
                lastList.append(curNode.val)
        
        if root:
            preOrder(root, root.left, root.right)
            midOrder(root, root.left, root.right)
            lastOrder(root, root.left, root.right)
        print([preList, midList, lastList])
        return [preList, midList, lastList]

MYSQL牛客网256 返回三次以上相同积分的情况

题目:

在这里插入图片描述
比较简单,直接groupby即可,稍微注意要按升序排序,所以指定的ASC。代码如下:

select number
from (select number, count(1) as cnt from grade group by number) t1
where cnt >= 3
order by number asc

MYSQL牛客网257 通过的题目排名

题目:

在这里插入图片描述

题目本身不难,这里主要记录下三种排序函数用法row_numberrankdense_rank

  1. row_number(): 不存在并列的情况,用法 row_number() over(partition by xx1 order by xx2 desc/asc) as rnk,假如用在本题,则id为1、6的排名会分别为2、3,不出现并列排名的情况 。
  2. rank(): 存在并列的情况,但并列后的顺序会出现跳过的情况。假如用在本题,则id为1、6的排名均为2,但id为2的排名会为4。
  3. dense_rank(): 存在并列的情况,且并列后的顺序正常排序。即为题目要求的顺序。

这里注意一点,本题只根据number排序,所以不用partition by。代码如下:

select *, dense_rank() over (order by number desc) as t_rank
from passing_number
order by t_rank asc, id asc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/132389.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Interactive Analysis of CNN Robustness

Interactive Analysis of CNN Robustness----《CNN鲁棒性的交互分析》 摘要 虽然卷积神经网络&#xff08;CNN&#xff09;作为图像相关任务的最先进模型被广泛采用&#xff0c;但它们的预测往往对小的输入扰动高度敏感&#xff0c;而人类视觉对此具有鲁棒性。本文介绍了 Pert…

SSH 远程登录 WSL

更新ssh设置 sudo apt-get update sudo apt-get remove openssh-server sudo apt-get install openssh-server 编辑网络配置 sudo vi /etc/ssh/sshd_config &#xff08;1&#xff09;修改ssh服务监听端口和监听地址 &#xff08;2&#xff09;修改ssh服务允许使用用户名密码…

linux入门---信号量

目录标题 为什么会有信号量信号量的概念信号量的接口和操作什么是环形队列单消费者生产者环形队列的模拟实现准备工作构造函数和析构函数push函数的模拟实现pop函数的模拟实现RingQueue完整代码测试代码 多生产多消费的环形队列 为什么会有信号量 在上一篇文章当中我们写过这么…

无人机航迹规划:五种最新智能优化算法(GRO、SWO、COA、LSO、KOA)求解无人机路径规划MATLAB

一、五种算法&#xff08;GRO、SWO、COA、LSO、KOA&#xff09;简介 1、淘金优化算法GRO 淘金优化算法&#xff08;Gold rush optimizer&#xff0c;GRO&#xff09;由Kamran Zolf于2023年提出&#xff0c;其灵感来自淘金热&#xff0c;模拟淘金者进行黄金勘探行为。VRPTW&am…

Qt界面设计时使各控件依据窗口缩放进行自适应填充的方法——使用布局、Spacer等控件

Qt界面设计时使各控件依据窗口缩放进行自适应填充的方法—使用布局、Spacer等控件 Chapter1 Qt界面设计时使各控件依据窗口缩放进行自适应填充的方法—使用布局、Spacer等控件Chapter2 Qt Creator中布局器详解01. 概述02. 开发环境03. 布局器概述04. 布局属性设置05. 弹簧条属性…

VBA_MF系列技术资料1-217

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于定…

算法通关村第八关-青铜挑战二叉树的经典题目

大家好我是苏麟 , 今天来说二叉树的经典题目 二叉树的双指针 所谓的双指针就是定义了两个变量&#xff0c;在二叉树中有时候也需要至少定义两个变量才能解决问题&#xff0c;这两个指针可能针对一棵树&#xff0c;也可能针对两棵树&#xff0c;我们姑且也称之为“双指针”吧。…

AI通义灵码能够帮你写通达信选股公式么?

答案是否定的 先不说语法错误&#xff0c;注释错误&#xff0c;就说AI压根不理解炸板和涨停板&#xff1b; 算了&#xff0c;股票交易AI千万别来掺和&#xff0c;会死的很惨的。

Linux C/C++ 入侵检测系统(IDS绕过技巧)

入侵检测系统&#xff08;IDS&#xff09;是一种网络安全设备&#xff0c;其主要功能是对网络传输进行即时监视&#xff0c;并在入侵检测系统&#xff08;IDS&#xff09;是一种网络安全设备&#xff0c;其主要功能是对网络传输进行即时监视&#xff0c;并在发现可疑传输时发出…

python升级pip的时候一直失败

如图,一直提示使用 python.exe -m pip install --upgrade pip 进行升级pip,但是执行这句命令又不成功.然后综合了几篇文章以后使用了下面的命令可以升级了 python -m pip install --upgrade pip --user -i https://mirrors.aliyun.com/pypi/simple/ 主要是在推荐的语句上使用…

赶紧收藏!阿里内部使用的127页k8s实战手册,不能再详细了!

2022 年 12 月 8 号Kubernetes 发布了1.26新版本&#xff0c;此版本中有两个突出的新功能&#xff0c;它们有可能改变用户与 Kubernetes 交互的方式&#xff0c;此外&#xff0c;其他功能将使集群管理员的工作更轻松。 说起来&#xff0c;Kubernetes从诞生初期就广泛受到业界的…

金字塔原理小节

目录 第1章 为什么要用金字塔结构 一、归类分组&#xff0c;将思想组织成金字塔 二、奇妙的数字“7” 三、归类分组搭建金字塔 四、找出逻辑关系&#xff0c;抽象概括 五、自上而下表达&#xff0c;结论先行 第1章 为什么要用金字塔结构 如果受众希望通过阅读你的文章、听…

玩了个锤子游戏小程序搭建流程:探索深度与逻辑的结合

随着移动互联网的普及&#xff0c;小程序已经成为了越来越多用户的选择。在这个背景下&#xff0c;玩了个锤子游戏小程序应运而生&#xff0c;它为用户提供了一个全新的游戏体验。那么&#xff0c;如何搭建这样一个小程序呢&#xff1f;本文将为大家详细介绍玩了个锤子游戏小程…

WPS数组

一、创建数组方法和数组的读取、修改、写入 数组是值的有序集合&#xff0c;其中的值叫作元素。每个元素有一个数值表示的位置&#xff0c;叫作索引&#xff0c;数组中的不同元素可以是不同数据类型。 function demo(){var arr1[99,"人","abc",[3,4,5]];…

【tgowt】更新thirdparty

更新完毕后是这样的 之前有过构建但是不能用在owt-p2p项目中,会有崩溃? 【tgowt】cmake转ninja vs构建现在好像都更新到108了 submodule比较麻烦 只修改这里的还不行:一旦git submodule init 后,再改这里的似乎晚了?如果能成功clone就有生成 还必须要改这里的 折腾好几次才…

由于找不到 d3dx9_43.dll,无法继续执行代码。重新安装程序可能会解决此问题

电脑出现d3dx9_43.dll缺失的问题&#xff0c;通常是由于DirectX组件未安装或损坏导致的。为了解决这个问题&#xff0c;我为您提供了以下四个解决方法&#xff1a; d3dx9_43.dll解决方法1. 使用dll修复程序修复 首先&#xff0c;使用系统文件程序dll进行修复操作非常简单&…

Python进行多维数据分析

多维数据分析是对数据的信息分析&#xff0c;它考虑了许多关系。让我们来介绍一些使用Python分析多维/多变量数据的基本技术。 从这里找到用于说明的数据的链接。&#xff08;https://archive.ics.uci.edu/dataset/111/zoo&#xff09; 以下代码用于从zoo_data. csv读取2D表格…

Spring Cloud学习(三)【Nacos注册中心】

文章目录 认识 NacosNacos 安装使用 Nacos 完成服务注册Nacos 服务分级存储模型集群负载均衡策略 NacosRule根据权重负载均衡Nacos 环境隔离&#xff08;命名空间&#xff09;Nacos 和 Eureka 的区别 认识 Nacos Nacos 是阿里巴巴的产品&#xff0c;现在是 SpringCloud 中的一…

高频SQL50题(基础版)-3

文章目录 主要内容一.SQL练习题1.1174-即时食物配送代码如下&#xff08;示例&#xff09;: 2.550-游戏玩法分析代码如下&#xff08;示例&#xff09;: 3.2356-每位教师所教授的科目种类的数量代码如下&#xff08;示例&#xff09;: 4.1141-查询近30天活跃用户数代码如下&…