楠君的小窝
LC42. 接雨水
题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 123输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2: 12输入:height = [4,2,0,3,2,5]输出:9 提示: n == height.length 1 <= n <= 2 * 104 0 <= height[i] <= 105 解题思路 单调栈 我们要保持栈内单调递减,栈内存储的元素为 height的下标 stack为栈,x为height中的高度 x < 栈顶高度时,将x对应的下标推入栈中 x == 栈顶高度时,将栈中旧下标弹出,新下标推入栈 x > 栈顶高度时,此时说明有一个凹陷,我们要计算这个凹陷的面积,长方形的面积 = 长 * 宽 弹出栈顶元素,定义为mid 计算长方形面积 双指针 代码 Python 123 ...
321周赛t4
题目: 给你一个长度为 n 的数组 nums ,该数组由从 1 到 n 的 不同 整数组成。另给你一个正整数 k 。 统计并返回 num 中的 中位数 等于 k 的非空子数组的数目。 注意: 数组的中位数是按 递增 顺序排列后位于 中间 的那个元素,如果数组长度为偶数,则中位数是位于中间靠 左 的那个元素。 例如,[2,3,1,4] 的中位数是 2 ,[8,4,3,5,1] 的中位数是 4 。 子数组是数组中的一个连续部分。 示例 1: 123输入:nums = [3,2,1,4,5], k = 4输出:3解释:中位数等于 4 的子数组有:[4]、[4,5] 和 [1,4,5] 。 示例 2: 123输入:nums = [2,3,1], k = 3输出:1解释:[3] 是唯一一个中位数等于 3 的子数组。 提示: n == nums.length 1 <= n <= 105 1 <= nums[i], k <= n nums 中的整数互不相同 解题思路: 先找到K的下标 从K下标开始往左遍历一次,往右遍历一次。 将题目转化一下:奇数 => 小于 ...
LC1106. 解析布尔表达式
题目: 给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果。 有效的表达式需遵循以下约定: "t",运算结果为 True "f",运算结果为 False "!(expr)",运算过程为对内部表达式 expr 进行逻辑 非的运算(NOT) "&(expr1,expr2,...)",运算过程为对 2 个或以上内部表达式 expr1, expr2, ... 进行逻辑 与的运算(AND) "|(expr1,expr2,...)",运算过程为对 2 个或以上内部表达式 expr1, expr2, ... 进行逻辑 或的运算(OR) 示例 1: 12输入:expression = "!(f)"输出:true 示例 2: 12输入:expression = "|(f,t)"输出:true 示例 3: 12输入:expression = "&(t,f)"输出:false 示例 4 ...
LC692. 前K个高频单词
题目: 给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序 排序。 示例 1: 1234输入: words = ["i", "love", "leetcode", "i", "love", "coding"], k = 2输出: ["i", "love"]解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。 注意,按字母顺序 "i" 在 "love" 之前。 示例 2: 1234输入: ["the", "day", "is", "sunny", "the", "the", "the& ...
LC795. 区间子数组个数
题目: 给你一个整数数组 nums 和两个整数:left 及 right 。找出 nums 中连续、非空且其中最大元素在范围 [left, right] 内的子数组,并返回满足条件的子数组的个数。 生成的测试用例保证结果符合 32-bit 整数范围。 示例 1: 1234输入:nums = [2,1,4,3], left = 2, right = 3输出:3解释:满足条件的三个子数组:[2], [2, 1], [3] 示例 2: 12输入:nums = [2,9,2,5,6], left = 2, right = 8输出:7 提示: 1 <= nums.length <= 105 0 <= nums[i] <= 109 0 <= left <= right <= 109 代码: Python 12345678class Solution: def numSubarrayBoundedMax(self, nums: List[int], left: int, right: int) -> int: ans, i0, i ...
数据结构及算法模板
优先队列1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162"""[7,6,5,4,3,2,1] 0,1,2,3,4,5,6[1,2,3,4,5,6,7] 1 2 34 5 6 7-----------------------------------优先队列:优先队列由堆建成(小根堆)有插入,弹出,上滤,下滤等操作;插入以及弹出均为 (logn)上滤以及下滤同样为 (logn)----------------------------------------------------------------------插入:1. item从堆的顶部进入,然后使用下滤操作2. item从堆的底部进入,然后使用上滤操作 ...
LC1742.盒子中小球的最大数量
题目: 你在一家生产小球的玩具厂工作,有 n 个小球,编号从 lowLimit 开始,到 highLimit 结束(包括 lowLimit 和 highLimit ,即 n == highLimit - lowLimit + 1)。另有无限数量的盒子,编号从 1 到 infinity 。 你的工作是将每个小球放入盒子中,其中盒子的编号应当等于小球编号上每位数字的和。例如,编号 321 的小球应当放入编号 3 + 2 + 1 = 6 的盒子,而编号 10 的小球应当放入编号 1 + 0 = 1 的盒子。 给你两个整数 lowLimit 和 highLimit ,返回放有最多小球的盒子中的小球数量。如果有多个盒子都满足放有最多小球,只需返回其中任一盒子的小球数量。 示例 1: 123456输入:lowLimit = 1, highLimit = 10输出:2解释:盒子编号:1 2 3 4 5 6 7 8 9 10 11 ...小球数量:2 1 1 1 1 1 1 1 1 0 0 ...编号 1 的盒子放有最多小球,小球数量为 2 。 示例 2: 1234567输入:lowLimit = ...
LC878.第N个神奇数字
题目 一个正整数如果能被 a 或 b 整除,那么它是神奇的。 给定三个整数 n , a , b ,返回第 n 个神奇的数字。因为答案可能很大,所以返回答案 对 109 + 7 取模 后的值。 示例 1: 输入:n = 1, a = 2, b = 3 输出:2 示例 2: 输入:n = 4, a = 2, b = 3 输出:6 提示: 1 <= n <= 109 2 <= a, b <= 4 * 104 解题思路 二分查找 + 容斥原理 今天这题我缺少了相应的基础知识容斥原理导致我解题到关键部分无法正确解出答案。 首先我们要先将问题转换一下,第N个神奇数字我们把它转化成一共N个神奇数字,那么我们只要求出一共有N个神奇数字即可得到答案。 求一共多少神奇数字 n // a + n // b - n // lcm这样我们就能得到目前一共多少神奇数字了。 二分查找n 代码 Python 1234567891011121314151617class Solution: def nthMagicalNumber(self, n: int, a: int, b: i ...
LeetCode175.组合两个表
先输入要查询的内容, firstname,lastname,city,state A left join B 取A全部,若B没有对应的值则为null A right join B 取B全部,若A没有对应的值为null 123select FirstName, LastName, City, statefrom PersonId left join Addresson Person.PersonId = Adderss.PersonId;
LC周赛.二叉搜索树最近节点查询
题目: 给你一个 二叉搜索树 的根节点 root ,和一个由正整数组成、长度为 n 的数组 queries 。 请你找出一个长度为 n 的 二维 答案数组 answer ,其中 answer[i] = [mini, maxi] : mini 是树中小于等于 queries[i] 的 最大值 。如果不存在这样的值,则使用 -1 代替。 maxi 是树中大于等于 queries[i] 的 最小值 。如果不存在这样的值,则使用 -1 代替。 返回数组 answer 。 123输入:root = [6,2,13,1,4,9,15,null,null,null,null,null,null,14], queries = [2,5,16]输出:[[2,2],[4,6],[15,-1]]解释:按下面的描述找出并返回查询的答案: 树中小于等于 2 的最大值是 2 ,且大于等于 2 的最小值也是 2 。所以第一个查询的答案是 [2,2] 。 树中小于等于 5 的最大值是 4 ,且大于等于 5 的最小值是 6 。所以第二个查询的答案是 [4,6] 。 树中小于等于 16 的最大值是 15 ,且大于等于 ...
LC891.子序列宽度之和
题目: 一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。 给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和 。由于答案可能非常大,请返回对 109 + 7 取余 后的结果。 子序列 定义为从一个数组里删除一些(或者不删除)元素,但不改变剩下元素的顺序得到的数组。例如,[3,6,2,7] 就是数组 [0,3,1,6,2,2,7] 的一个子序列。 示例 1: 输入:nums = [2,1,3] 输出:6 解释:子序列为 [1], [2], [3], [2,1], [2,3], [1,3], [2,1,3] 。 相应的宽度是 0, 0, 0, 1, 1, 2, 2 。 宽度之和是 6 。 示例 2: 输入:nums = [2] 输出:0 提示: 1 <= nums.length <= 105 1 <= nums[i] <= 105 解题思路: 由于求的时子序列的宽度,不是子数组的宽度。而宽度的要素是序列中最大值和最小值,顺序对于最大值和最小值不影响。我们对数组进行排序(递增) 计算每个元素作为最大值能有多少种子序列,经过计算得 ...
1732. 找到最高海拔
题目: 有一个自行车手打算进行一场公路骑行,这条路线总共由 n + 1 个不同海拔的点组成。自行车手从海拔为 0 的点 0 开始骑行。 给你一个长度为 n 的整数数组 gain ,其中 gain[i] 是点 i 和点 i + 1 的 净海拔高度差(0 <= i < n)。请你返回 最高点的海拔 。 示例 1: 输入:gain = [-5,1,5,0,-7] 输出:1 解释:海拔高度依次为 [0,-5,-4,1,1,-6] 。最高海拔为 1 。 示例 2: 输入:gain = [-4,-3,-2,-1,4,3,2] 输出:0 解释:海拔高度依次为 [0,-4,-7,-9,-10,-6,-3,-1] 。最高海拔为 0 。 提示: n == gain.length 1 <= n <= 100 -100 <= gain[i] <= 100 解题思路: 这题其实就是简单的模拟,题目给的有效信息就是gain[i] 是点 i 和点 i + 1 的 净海拔高度差(0 <= i < n) 那么默认高度就是 0 ,我们只要不断的 + gain 中的元素,然 ...
avatar
🐟认真摸鱼中
楠君的小窝
Live is so good
前往小窝
公告栏
--- 主域名 ---
fomal.cc | fomal.cn
--- 备用域名 ---
netlify.fomal.cc
cloudflare.fomal.cc
--- 网站安卓APP ---
🍧点此下载🍧
小站资讯
文章数目 :
111
本站总字数 :
6.3w
本站访客数 :
本站总访问量 :
最后更新时间 :
空降评论复制本文地址
随便逛逛昼夜切换关于博客美化设置切换全屏打印页面