
LeetCode每日一题系列
文章平均质量分 88
wion03
川大蒟蒻一枚
展开
-
1402. 做菜顺序 贪心\动态规划\排序 困难
一个厨师收集了他n道菜的满意程度,这个厨师做出每道菜的时间都是 1 单位时间。一道菜的 「」定义为烹饪这道菜结束的时间(包含之前每道菜所花费的时间)乘以这道菜的满意程度,也就是time[i]。返回厨师在准备了一定数量的菜肴后可以获得的最大总和。你可以按顺序安排做菜的顺序,你也可以选择放弃做某些菜来获得更大的总和。原创 2023-10-22 20:25:22 · 130 阅读 · 0 评论 -
1333. 餐厅过滤器
比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆【有greater、less和自定义函数,其中greater使得优先队列中的元素升序排列,所以第一个元素(头部)就是最小的元素,也就是小顶堆;在按照 veganFriendly = 1, maxPrice = 50 和 maxDistance = 10 进行过滤后,我们得到了餐馆 3, 餐馆 1 和 餐馆 5(按评分从高到低排序)。数据类型,就是优先队列中每一个元素的数据类型。原创 2023-09-27 19:49:49 · 70 阅读 · 0 评论 -
146.LRU缓存
请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。实现 类:函数 和 必须以 的平均时间复杂度运行。首先,先清楚 LRU 的机制:LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法在操作系统中的一般实现方式是赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。但在本题中,要求我们以O(1原创 2023-09-25 13:49:38 · 65 阅读 · 0 评论 -
2603.收集树中金币
当队列不为空时,每次取出队头,删除当前节点,并且对相连的节点都做处理,如果相连的节点处理后变成了新的叶子节点且硬币数也为0,也要将该节点加入队列;那么遍历新树3号所需要的步数,就等于 2*(剩余的节点数-1),并且根据之前的推论,这个步数就等于原本树在收集距离为2时所需要的步数。从节点 0 出发,收集节点 4 和 3 处的金币,移动到节点 2 处,收集节点 7 处的金币,移动回节点 0。从节点 2 出发,收集节点 0 处的金币,移动到节点 3 ,收集节点 5 处的金币,然后移动回节点 2。原创 2023-09-22 09:01:44 · 85 阅读 · 0 评论 -
198.打家劫舍&213.打家劫舍Ⅱ
你是一个专业的小偷,计划偷窃沿街的房屋。偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。这里从0开始给房屋编号,如果0号房屋不偷取,那么金额一定为0,反之,金额就是0号房屋的金额。你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。原创 2023-09-17 16:59:19 · 104 阅读 · 1 评论 -
1851. 包含每个查询的最小区间
给你一个二维整数数组intervals,其中表示第i个区间开始于lefti、结束于righti(包含两侧取值,区间的定义为区间中包含的整数数目,更正式地表达是。再给你一个整数数组queries。第j个查询的答案是满足的i。如果不存在这样的区间,那么答案是-1。以数组形式返回对应查询的所有答案。[3,3,1,4]查询处理如下:- Query = 2 :区间 [2,4] 是包含 2 的最小区间,答案为 4 - 2 + 1 = 3。原创 2023-07-26 15:37:01 · 103 阅读 · 1 评论 -
834. 树中距离之和
给定一个无向、连通的树。树中有n个标记为0...n-1的节点以及n-1条边。给定整数n和数组edges表示树中的节点ai和bi之间有一条边。返回长度为n的数组answer,其中answer[i]是树中第i个节点与所有其他节点之间的距离之和。原创 2023-07-17 10:58:47 · 285 阅读 · 1 评论 -
979. 在二叉树中分配硬币
在一次移动中,我们可以选择两个相邻的结点,然后将一枚硬币从其中一个结点移动到另一个结点。移动可以是从父结点到子结点,或者从子结点移动到父结点。链接:https://leetcode.cn/problems/distribute-coins-in-binary-tree。将两枚硬币从根结点的左子结点移动到根结点(两次移动)。然后,将一枚硬币从根结点移动到右子结点。商业转载请联系官方授权,非商业转载请注明出处。一枚硬币从根结点移动到左子结点,一枚硬币从根结点移动到右子结点。个结点的二叉树的根结点。原创 2023-07-15 17:43:43 · 103 阅读 · 1 评论 -
1911. 最大子序列交替和
这是一道典型的动态规划思想解决的问题:将问题分成若干个子问题,通过依次求解子问题的最优解来获得整体的最优解。我们令 dp[i][0] 和 dp[i][1] 表示数组 nums 的 0 1 2……i 的前缀子序列分别选取 偶数个数 和 奇数个数 时和的最大值。原创 2023-07-13 00:14:13 · 133 阅读 · 1 评论 -
16. 最接近的三数之和&18.四数之和
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。输入:nums = [-1,2,1,-4], target = 1。输入:nums = [0,0,0], target = 1。中选出三个整数,使它们的和与 target 最接近。比较,计算出他们在数轴上的距离,并与最小值。三层循环,每层循环遍历N,时间复杂度为O(给你一个长度为 n 的整数数组。假定每组输入只存在恰好一个解。解法一:暴力三重循环(会超时)从头开始遍历数组,确定第一个数。比较,如果更小就更新。并记录当前组合的和。原创 2023-07-11 11:28:35 · 75 阅读 · 0 评论 -
167. 两数之和 II - 输入有序数组
分别初始化左右指针为左右边界,每次将当前的和与 target 比较,由数组的单调非递减性,若当前和大于 target ,那么右指针一定偏大,需要左移;解释:-1 与 0 之和等于目标数 -1。因此 index1 = 1, index2 = 2。因此 index1 = 1, index2 = 2。输入:numbers = [2,7,11,15], target = 9。输入:numbers = [2,3,4], target = 6。输入:numbers = [-1,0], target = -1。原创 2023-07-11 14:55:56 · 71 阅读 · 1 评论