您好、欢迎来到现金彩票网!
当前位置:秒速牛牛投注 > 桶链算法 >

饭后小甜点leetcode——设计题

发布时间:2019-07-07 05:15 来源:未知 编辑:admin

  运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。

  获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。

  写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间。

  【思路】最近最少使用,就是最近没怎么访问过,实现的时候,每次新访问一个元素,就把它提到链表头,渐渐的,最近没怎么访问过的就被滚动到链表尾去了。

  删除LRU中的最后一个元素。想要保证O(1)的话应该用LinkedList

  把某一个元素移动或添加到LRU最前面。想要保证O(1)的话应该用LinkedList

  在这里不要担心删除元素的时候需要先找到元素花费的时间,map里本身存的是key和LinkedListNode的键值对,所以通过key可以直接得到对应Node的引用,C#中的LinkedList用的是双向循环链表,所以删除一个给定Node所需时间是O(1)的。

  【思路】 跟LRU的区别在于,在缓存满了的时候,LRU是删掉最近最少使用的,LFU是删掉最少使用的,也就是说,不管是什么时候访问的,都只淘汰频率最低的,比如有个元素,它一开始被访问了好多次,后来没怎么被访问过,但新访问的那些元素的访问次数都不如它次数多,所以要淘汰还是不会淘汰到它头上,但如果使用频率相等,删掉那个时间最久远的。(感觉有点像皇上要选秀了后宫没地方住了要缩减现有后宫,LRU是淘汰最久没有被宠幸过的,LFU是淘汰宠幸次数最少的无论新人旧人,just a joke 😃 )

  Inc(key) - 插入一个新的值为 1 的 key。或者使一个存在的 key 增加一,保证 key 不为空字符串。

  Dec(key) - 如果这个 key 的值是 1,那么把他从数据结构中移除掉。否者使一个存在的 key 值减一。如果这个 key 不存在,这个函数不做任何事情。key 保证不为空字符串。

  GetMaxKey() - 返回 key 中值最大的任意一个。如果没有元素存在,返回一个空字符串。

  GetMinKey() - 返回 key 中值最小的任意一个。如果没有元素存在,返回一个空字符串。

  【思路】有点点像上一题,还是用链表和字典相结合,链表中始终保持有序(从大到小),这样,GetMaxKey和GetMinKey就直接get链表头尾,O(1)复杂度。

  插入的时候,如果key不存在与字典中,就new一个;如果存在,则这个对应的值加一,同时因为值变了,要调整一下在链表中的位置,使得链表保持有序。删除的时候同理,要调整在链表中的位置,保持链表有序。

  并查集概述并查集是一种用在图论中的数据结构,最主要的功能就是:查看两点是否相连。O(1)复杂度。就是看一下这两个节点的祖宗节点是不是同一个。合并两个点所在集合。O(logn)复杂度。就是让一个集合的祖...博文来自:Sophie1797的博客

  图的遍历一般有两种,DFS(深度优先搜索)和BFS(广度优先搜索),这两种基础的遍历上可以衍生出很多算法问题。DFS求无向图连通分量323.无向图中连通分量的数目这道题就是DFS一个很基础的应用,求连...博文来自:Sophie1797的博客

  网络/存储字节序中有大、小端的概念,简而言之就是内存地址由高到低与数据由高位到低位的对应关系.PS:哪个是大端,哪个是小端我也经常搞混.简单的测试程序一枚.(Updated/linux3.16)1#i...博文来自:weixin_33755557的博客

  0.Thanks题目来自于大神:给聪明的你解解闷1.这是一道世界级的难题世界级难题.png再次声明一下,这个是4位数的密码,五次输入都错,但是只有两个数字正确,而且数字的位置都不对。2.学渣的解法学渣...博文来自:weixin_34417635的博客

  【结构化整理】演讲和写作的技术有什么不同?最大的区别在于表达的渠道。演讲虽然内容很重要,但更重要的是逻辑要足够清晰、表达要足够有趣、情绪要足够饱满;更是一种表达的艺术、一种关于影响力的科学。一、演讲的...博文来自:weixin_34304013的博客

  哈哈,今天在讨论AndroidN为何物时,想到了各个版本对应的甜点名称,在这里记录一下,我画了一个图,在图片中对应找出名称即可,赤果果的吃货啊~~~...博文来自:Signal_Du的博客

  1.链表题中经常给链表添加一个假头,使得头结点也能受到检查2.链表的遍历通常设定一个指针指向头部,然后遍历直至指针指的结点不为NullListNodecur=head;while(cur!=null)...博文来自:盛夏与微风

  前面原题链接,后面题解链接 原题(50题)链接 目录   # 题名 解答 通过率 难度   104 二叉树的最大深度       64.1% 简...博文来自:一叶之修的博客

  你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个...博文来自:Alex的博客

  给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例1:给定二叉树 [3,9,20,null,null,15...博文来自:Jaster_wisdom的专栏

  以下是我个人做题过程中的一些体会:1.LeetCode的题库越来越大,截止到目前,已经有321个问题了。对于大多数人来说,没有时间也没有必要把所有题目都做一遍(时间充裕可以随意)。刷个100题左右应该...博文来自:Lnho的专栏

  LeetCode是一个美国的在线编程网站,上面主要收集了各大IT公司的笔试面试题,对于应届毕业生找工作是一个不可多得的好帮手,尤其是在面试BATH程序员的时候,刷一下LeetCode,甚至会刷到原题。...

  一.删除链表中的节点请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表-- head= [4,5,1,9],它可以表示为:4-gt;5-&...

  7月保研的夏令营已经告一段落了,面试中被问了很多算法的问题,感觉自己算法知识有些许薄弱(acm大神忽略),所以准备开始刷leetcode,顺便也为面试准备,因为想把刷leet里面的一些心得给记下来,便...

  描述小z准备举办一个比赛。他需要提供一些甜点给参赛者来补充能量。每种甜品有一定的能量ti和大小ui,且每种甜点最多有vi个。小z准备用箱子来包装甜点。箱子可以容纳一定体积的甜点且需要一定的费用。小z有...

  给定一个大小为n的数组,找到其中的众数。众数是指在数组中出现次数大于⌊n/2⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例1:输入:[3,2,3]输出:3示例2:输入:[2,2,1...

  给定一个数组,它的第i个元素是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉...

  题目略思路一:利用中序遍历中序遍历BST,当遍历到第k个时,写入结果。为了更大地提高效率,在找到第k个时,不再继续递归。有两种方法(我常用的),一:将递归函数设置为有返回类型的,按照返回值决定是否继续...

  Leetcode算法题分类解析:(一)总览1.为何/如何刷题1.1必要性刷题刷题,从“刷”字就能看出其中的机械性和应试性,但这就是几乎所有IT公司面试中的一环。尽管面试者可能也对这种考察方式不是很满意...

  问题设计实现双端队列。你的实现需要支持以下操作:MyCircularDeque(k):构造函数,双端队列的大小为k。insertFront():将一个元素添加到双端队列头部。如果操作成功返回true。...

  小白刷题,有优化的地方还请赐教。题目如下:给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字0之外,这两个数字都不会...

  文章目录普通二叉树前序+中序中序+后序前序+后序BST这个系列总结一下,给定前/中/后序遍历其中两个遍历的结果,要求构造出原二叉树,这种题。主要思路是用递归+分治普通二叉树前序+中序leetcode题...

  最近在刷亚麻的面试题,然后顺便想练一练python的技巧,所以就用python刷了一边。然后mark一下以后可以复习。leetcode771.大概就是给定两个字符串a和b,问b中出现了多少次a的字符。...

  题目描述给定一个数组,它的第i个元素是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买...

  帐号相关流程注册范围n企业n政府n媒体n其他组织换句话讲就是不让个人开发者注册。 :)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账...

  小雨同学的技术博客jquery/js实现一个网页同时调用多个倒计时(最新的)

  jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn...

  command窗口是命令窗口,即为sqplus窗口,有命令提示符,识别sqlplus命令,基本的命令都可以执行nsql仅可执行DDL、select、DML等...

  对象的创建和销毁在一定程度上会消耗系统的资源,虽然jvm的性能在近几年已经得到了很大的提高,对于多数对象来说,没有必要利用对象池技术来进行对象的创建和管理。但是对于有些对象来说,其创建的代价还是比较昂...

  御前两把刀的专栏微信支付V3微信公众号支付PHP教程(thinkPHP5公众号支付)/JSSDK的使用

  扫二维码关注,获取更多技术分享nnn 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...

  记得很早以前公司项目中添加过移动支付这一块, 包括微信,支付宝,银联等第三方的整合。 但是后来懒于总结就没留下什么, 最近公司项目打算添加,所以打算简单总结一下,记上一笔以备将来使用。 毕竟第三方的支...

  本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇...

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗!nnDocker的三大核心概念:镜像、容器、仓库n镜像:类似虚拟机的镜像、用俗话说就是安装文件。n容器:类似一个轻量...

http://duchtech.com/tongliansuanfa/315.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有