数据结构与算法
okclouderx
这个作者很懒,什么都没留下…
展开
-
[leetcode][1641]统计字典序元音字符串的数目
相当于 0原创 2023-03-29 20:20:56 · 312 阅读 · 0 评论 -
[leetcode][2319]判断矩阵是否是一个 X 矩阵
时间复杂度:O(n^2)空间复杂度:O(1)原创 2023-01-31 13:11:35 · 180 阅读 · 0 评论 -
[leetcode][2315]统计星号
使用 valid 标记是否处于竖线对。如果不在竖线对,字符是 *,答案加一。时间复杂度:O(n),一次遍历。空间复杂度:O(1),常数空间。原创 2023-01-29 23:20:20 · 185 阅读 · 0 评论 -
[leetcode][1664]生成平衡数组的方案数
使用 4 个 int 分别保存被删除位置左边和右边的奇数位和、偶数位和。时间复杂度:O(n),两次遍历。空间复杂度:O(1),常数空间。原创 2023-01-28 23:30:13 · 166 阅读 · 1 评论 -
[leetcode][2293]极大极小游戏
空间复杂度:O(n),每个新数组的长度是 n / 2 + n / 4 + …空间复杂度:O(n),每个新数组的长度是 n / 2 + n / 4 + …时间复杂度:O(n),每一轮需要 n / 2 + n / 4 + …时间复杂度:O(n),每一轮需要 n / 2 + n / 4 + …时间复杂度:O(n),每一轮需要 n / 2 + n / 4 + …空间复杂度:O(1),不需要额外空间。原创 2023-01-15 22:41:12 · 223 阅读 · 0 评论 -
[acwing][785]快速排序
找到中间位置的值 x,将所有 = x 的数字排到它后面。然后处理 [left, pos] 和 [pos, right]两个区间。时间复杂度:O(nlogn),找到每个元素的位置要 n 时间,递归深度 logn,平均 nlogn。空间复杂度:O(logn),递归深度 logn。如果 left >= right,递归结束。原创 2023-01-08 23:56:07 · 100 阅读 · 0 评论 -
[leetcode][2185]统计包含给定前缀的字符串
遍历每个字符串,判断是否以 pref 为前缀。使用 startsWith 判断。时间复杂度:O(mn),m 是 pref 的长度,n 是 words 的长度。空间复杂度:O(1),常数空间。原创 2023-01-08 23:24:33 · 95 阅读 · 0 评论 -
[leetcode][1802]有界数组中指定下标处的最大值
查找最大值用二分查找,范围的最小值为1,最大值为 maxSum。查找条件为区间和不超过 maxSum,相邻元素按照减 1 递减,直到为 1。查找左右两个区间和,使用 cal 方法,big - 1为等差数列的最后一个,按照 length 得到等差数列的第一个,或者存在多余的 1。分两种情况求和,(s1 + sn) * n / 2 + 额外存在的 1。时间复杂度:O(log(maxSum)),二分查找时间复杂度。空间复杂度:O(1),常数空间。原创 2023-01-04 23:58:37 · 84 阅读 · 0 评论 -
[leetcode][2042]检查句子中的数字是否递增
找到字符串中的每个数字,然后和前一个数字比较,如果不是严格递增就提前返回 false。否则返回 true。注意这题不要使用 split 方法,因为 java 的 split 耗时多。空间复杂度:O(1),需要 2 个整数变量。时间复杂度:O(n),遍历 n 个元素。原创 2023-01-03 23:55:39 · 111 阅读 · 0 评论 -
[leetcode][1801]积压订单中的订单总数
需要注意比较当前订单和队列头部的数量,选择两者较小的值,并且把剩余的数量分别放回买卖的两个队列。时间复杂度:O(nlogn),优先级队列,遍历n个元素,每个元素处理时间为logn。积压订单用优先队列表示,因为需要删除买的价格贵和卖的价格低的订单,因此用优先队列。采购订单按照买入的价格降序,优先删除贵的;销售订单按照升序,优先删除价格低的。空间复杂度:O(n),队列的大小为元素个数。原创 2023-01-02 22:33:36 · 86 阅读 · 0 评论 -
[leetcode][2351]第一个出现两次的字母
用 int 的 32 个 bit 记录每个字母是否出现过。空间复杂度:O(1),一个 int 表示。用 int[] 记录每个字母出现的次数。用 set 记录每个字母出现的次数。空间复杂度:O(26),字母个数。空间复杂度:O(26),字母个数。时间复杂度:O(n),遍历一次。时间复杂度:O(n),遍历一次。时间复杂度:O(n),遍历一次。原创 2023-01-01 23:57:48 · 81 阅读 · 0 评论 -
[leetcode][2037]使每位学生都有座位的最少移动次数
将位置和学生分别排序,然后对差的绝对值求和。交换位置不会得到更优的答案。可以交换后分情况讨论得出结论。综合所有情况,ans1原创 2022-12-31 22:58:21 · 422 阅读 · 0 评论 -
10. 正则表达式匹配
10. 正则表达式匹配给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符原创 2020-06-20 21:36:40 · 275 阅读 · 0 评论 -
126. 单词接龙 II
126. 单词接龙 II给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列。转换需遵循如下规则:每次转换只能改变一个字母。转换后得到的单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回一个空列表。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。示例 1:输入:beginWor原创 2020-06-15 00:26:57 · 854 阅读 · 0 评论 -
146. LRU缓存机制
146. LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥已经存在,则变更其数据值;如果密钥不存在,则插入该组「密钥/数据值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。原创 2020-05-25 23:49:10 · 116 阅读 · 0 评论 -
面试题24. 反转链表
面试题24. 反转链表定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000注意:本题与主站 206 题相同:https://leetcode-cn.com/problems/reverse-linked-list/来源:力扣(LeetCode)链接:https:原创 2020-05-16 23:27:30 · 160 阅读 · 0 评论 -
560. 和为K的子数组
560. 和为K的子数组给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。来源:力扣(LeetCode)链接:https://lee原创 2020-05-16 22:24:05 · 173 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q原创 2020-05-14 23:53:00 · 112 阅读 · 0 评论 -
136. 只出现一次的数字
136. 只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/single-number著作权归领扣网络所有。商业转载请联系官方授权,非商业转载原创 2020-05-14 23:47:08 · 136 阅读 · 0 评论 -
572. 另一个树的子树
572. 另一个树的子树给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s: 3 / \ 4 5 / \ 1 2给定的树 t: 4 / \ 1 2返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。示例 2:给定的树 s: 3 / \ 4原创 2020-05-12 23:51:19 · 121 阅读 · 0 评论 -
面试题56 - I. 数组中数字出现的次数
面试题56 - I. 数组中数字出现的次数一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]限制:...原创 2020-05-04 16:24:09 · 164 阅读 · 0 评论 -
33. 搜索旋转排序数组
33. 搜索旋转排序数组假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(l...原创 2020-04-27 22:42:54 · 125 阅读 · 0 评论 -
466. 统计重复个数
466. 统计重复个数由 n 个连接的字符串 s 组成字符串 S,记作 S = [s,n]。例如,[“abc”,3]=“abcabcabc”。如果我们可以从 s2 中删除某些字符使其变为 s1,则称字符串 s1 可以从字符串 s2 获得。例如,根据定义,“abc” 可以从 “abdbec” 获得,但不能从 “acbbe” 获得。现在给你两个非空字符串 s1&nb...原创 2020-04-19 19:04:31 · 210 阅读 · 0 评论 -
5389. 点菜展示表
5389. 点菜展示表给你一个数组 orders,表示客户在餐厅中完成的订单,确切地说, orders[i]=[customerNamei,tableNumberi,foodItemi] ,其中 customerNamei 是客户的姓名,tableNumberi 是客户所在餐桌的桌号,而 foodItemi 是客户点的餐品名称。请你返回该餐厅的 点菜展示表 。在这张表中,表中第一行为标题,其第...原创 2020-04-19 12:55:07 · 205 阅读 · 0 评论 -
5388. 重新格式化字符串
5388. 重新格式化字符串给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母。请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。请你返回 重新格式化后 的字符串;如果无法按要求重新格式化,则返回一个 空字符串 。示例 1:输入:s = "a0b1c2"输出:"0a1b2c"解释:"0a1b2c" 中任意...原创 2020-04-19 12:48:32 · 448 阅读 · 0 评论 -
445. 两数相加 II
445. 两数相加 II给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -&g...原创 2020-04-14 22:34:02 · 158 阅读 · 0 评论 -
355. 设计推特
355. 设计推特设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近十条推文。你的设计需要支持以下的几个功能:postTweet(userId, tweetId): 创建一条新的推文getNewsFeed(userId): 检索最近的十条推文。每个推文都必须是由此用户关注的人或者是用户自己发出的。推文必须按照时间顺序由最...原创 2020-04-14 00:29:10 · 171 阅读 · 0 评论 -
617. 合并二叉树
617. 合并二叉树给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 ...原创 2020-04-13 22:42:20 · 108 阅读 · 0 评论 -
面试题 16.03. 交点
面试题 16.03. 交点给定两条线段(表示为起点start = {X1, Y1}和终点end = {X2, Y2}),如果它们有交点,请计算其交点,没有交点则返回空值。要求浮点型误差不超过10^-6。若有多个交点(线段重叠)则返回 X 值最小的点,X 坐标相同则返回 Y 值最小的点。示例 1:输入:line1 = {0, 0}, {1, 0}line2 = {1, 1}, {0, -...原创 2020-04-12 18:34:08 · 208 阅读 · 0 评论 -
460. LFU缓存
460. LFU缓存请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。它应该支持以下操作:get 和 put。get(key) - 如果键存在于缓存中,则获取键的值(总是正数),否则返回 -1。put(key, value) - 如果键不存在,请设置或插入值。当缓存达到其容量时,则应该在插入新项之前,使最不经常使用的项无效。在此问题中,当存在平...原创 2020-04-05 23:58:04 · 159 阅读 · 0 评论 -
912. 排序数组
912. 排序数组给你一个整数数组 nums,请你将该数组升序排列。示例 1:输入:nums = [5,2,3,1]输出:[1,2,3,5]示例 2:输入:nums = [5,1,1,2,0,0]输出:[0,0,1,1,2,5]提示:1 <= nums.length <= 50000-50000 <= nums[i] <= 50000来源...原创 2020-03-31 23:25:04 · 297 阅读 · 0 评论 -
面试题62. 圆圈中最后剩下的数字
面试题62. 圆圈中最后剩下的数字0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出: 3示例 2:输入: n = ...原创 2020-03-30 22:59:36 · 104 阅读 · 0 评论 -
1162. 地图分析
1162. 地图分析你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗?请返回该海洋区域到离它最近的陆地区域的距离。我们这里说的距离是『曼哈顿距离』(&nb...原创 2020-03-29 22:11:17 · 193 阅读 · 0 评论 -
200. 岛屿数量
200. 岛屿数量给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3思路可以采用深度优先搜索(d...原创 2020-03-13 23:21:40 · 248 阅读 · 0 评论 -
198. 打家劫舍
198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1)...原创 2020-03-13 22:34:41 · 94 阅读 · 0 评论 -
169. 多数元素
169. 多数元素给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2来源:力扣(LeetCode)链接:https://le...原创 2020-03-12 23:10:25 · 137 阅读 · 0 评论 -
面试题 10.01. 合并排序的数组
面试题 10.01. 合并排序的数组给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。初始化 A 和 B 的元素数量分别为 m 和 n。示例:输入:A = [1,2,3,0,0,0], m = 3B = [2,5,6], n = 3输出: [1,2,2,3,5,6]说...原创 2020-03-12 22:38:36 · 124 阅读 · 0 评论 -
分糖果 II
分糖果 II排排坐,分糖果。我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果。然后,我们再回到队伍的起点,给第一个小朋友 n + 1 颗糖果,第二个小朋友 n + 2 颗,依此类推,直到给最后一个小朋友 2 * n&nb...原创 2020-03-05 23:18:30 · 108 阅读 · 0 评论 -
分数到小数
分数到小数给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。如果小数部分为循环小数,则将循环的部分括在括号内。示例 1:输入: numerator = 1, denominator = 2输出: "0.5"示例 2:输入: numerator = 2, denominator = 1输出: "2"示...原创 2020-01-21 23:56:28 · 356 阅读 · 0 评论 -
两棵二叉搜索树中的所有元素
两棵二叉搜索树中的所有元素给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。.示例 1:输入:root1 = [2,1,4], root2 = [1,0,3]输出:[0,1,1,2,3,4]示例 2:输入:root1 = [0,-10,10], root2 = [5,1,7...原创 2019-12-30 00:25:50 · 259 阅读 · 0 评论