- 博客(29)
- 收藏
- 关注
原创 最长递增子序列
只需要找出 nums[0..i]中以nums[i] 结束的最长严格递增子序列,以及 nums[i..n−1]中以 nums[i]开始的最长严格递减子序列即可。如果 nums[i]>d的末尾元素 ,则直接加入到 d 数组末尾,并更新 len=len+1;否则,找到第一个比 nums[i]小的数 d[k],并更新 d[k+1]=nums[i]。用d[i]表示长度为i的最长上升序列的末尾元素的最小值,d[i]是单调递增的。时间复杂度:O(n^2)
2023-12-26 19:51:12 464 1
原创 LeetCode30 串联所有单词的子串
思路:枚举开始划分字符串s的位置[0,n-1],将s划分为单词组,每个单词的长度为word[0].size(),用滑动动窗口求解,方法与LeetCode438.找到字符串中所有字母异位词相同。时间复杂度:O(lens×n),其中lens是输入 s 的长度,n 是 words中每个单词的长度。需要做 n 次滑动窗口,每次需要遍历一次 s。空间复杂度:O(m×n),其中 m 是 words的单词数,n 是 words中每个单词的长度。每次滑动窗口时,需要用一个哈希表保存单词频次。
2023-12-21 21:23:41 315
原创 LeetCode871 最低加油次数
我们尝试从优先队列(大根堆)中取出过往油量最大的加油站并进行加油(同时对加油次数。中,含义为使用完剩余的油量,可以去到的最远距离,同时将所在位置。的加油站数量加入优先队列(大根堆,根据油量从小到大排序)中。,代表还没到达(经过)目标位置,继续模拟行进过程。(下次循环),此时由于清空了剩余油量。重复上述过程,直到满足。
2023-12-17 21:02:12 341 1
原创 LeetCode215 数组中的第K个最大元素
只需要根据划分两边后,第 k大数会落在哪一边,来决定对哪边进行递归处理即可。第k大的数也就是升序数组中下标为n-k的元素。
2023-12-14 17:14:17 14 1
原创 LeetCode 1606 找到处理最多请求的服务器
思路:根据每个任务有对应的开始时间和持续时间,用优先队列busy维护二元组(结束时间,服务器编号),按结束时间从早到晚排列。根据任务分配规则,用红黑树free维护空闲服务器编号,根据编号从小到大排列。
2023-12-14 12:02:05 23 1
原创 Trie(字典树)
Trie 树(又叫前缀树或字典树)是一种用于快速查询某个字符串或字符前缀是否存在的数据结构。其核心是使用「边」来代表有无字符,使用「点」来记录是否为「单词结尾」以及「其后续字符串的字符是什么」。
2023-12-08 19:47:16 81
原创 LeetCode32、最长有效括号
从左到右遍历字符串,对于遇到的每个 '(',增加 left ,对于遇到的每个 ')',增加right。这样的做法贪心地考虑了以当前字符下标结尾的有效括号长度,每次当右括号数量多于左括号数量的时候之前的字符我们都扔掉不再考虑,重新从下一个字符开始计算,但这样会漏掉一种情况,就是遍历的时候左括号的数量始终大于右括号的数量,即 (() ,这种时候最长有效括号是求不出来的。如果栈为空,说明当前的右括号为没有被匹配的右括号,将其下标放入栈中来更新「最后一个没有被匹配的右括号的下标」
2023-12-02 22:18:34 16
原创 字符串滑动窗口问题
计算以s[right]结尾的字符串的无重复字符的最长子串长度,若大于result,则更新result。维持一个长度为p.size()的滑动窗口,用hs记录窗口中每一个字母出现的次数。的子串,返回这些子串的起始索引。不考虑答案输出的顺序。指由相同字母重排列形成的字符串(包括相同的字符串)。所有字符的子串,则返回空字符串。,请你找出其中不含有重复字符的。直到窗口中的字符串不再符合要求,所有字符的最小子串。
2023-11-26 21:20:15 19
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人