- 博客(15)
- 收藏
- 关注
原创 去除重复字母
如bcabc,遍历第一个b时,存如res,遍历到第一个c,若加入res,bc是最小字典序的,所以将c也存入res(此时res中为bc),遍历到a,若加入res,bca不是最小字典序,因为剩余的字符里有bc,所以可以从res中弹出c,此时res中为b,若现在加入a,ba也不是最小字典序,所以弹出b,此时res为空,把a加入res,后续的两个bc若加入res,是满足最小字典序的,所以加入。1、如果当前字符在整个字符串中只有一个,只能存进res(虽定义为string,但当栈用,且栈中存的数据是满足最小字典序的)
2025-07-23 21:53:11
412
原创 分割数组为连续子序列
如果哈希表中存在以 x−1 结尾的子序列,则取出以 x−1 结尾的最小的子序列长度,将子序列长度加 1 之后作为以 x 结尾的子序列长度。遍历数组中的数据x,若存在一个以x-1为结尾的子序列,则将x插入以x-1为结尾的子序列,若存在多个以x-1为结尾的子序列,为了让最短的子序列尽可能的长,应该将x插入其中最短的子序列。哈希表的键为子序列的最后一个数字,值为最小堆,用于存储所有的子序列长度,最小堆满足堆顶的元素是最小的,因此堆顶的元素即为最小的子序列长度。输入: [1,2,3,3,4,4,5,5]
2025-07-23 17:25:54
140
原创 翻转矩阵后的得分
翻转是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。2、行处理完之后,遍历除了第一列的所有列,判断此时每列1的个数,若1的个数小于0的个数则进行反转。在做出任意次数的翻转后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。为了使最终结果最大,则矩阵每一行的最左边都必须为1,然后让每列的1尽可能的多。转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]]输入:[[0,0,1,1],[1,0,1,0],[1,1,0,0]]
2025-07-23 15:08:15
416
原创 无重叠区间
首先输入区间集合的大小n(n<20000),然后输入n行,每行2个整数,表示区间的起始和结束。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。输入: [ [1,2], [2,3], [3,4], [1,3] ]解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。输入: [ [1,2], [1,2], [1,2] ]解释: 移除 [1,3] 后,剩下的区间没有重叠。输入: [ [1,2], [2,3] ]
2025-07-22 20:32:31
456
原创 LeetCode:881 救生艇
最主要的思想就是:体重轻的人应该尽量与体重重的人乘一艘船(因为如果不这样的话:比如两个最轻的人一艘船就可能导致其他的人不再有共用一条船的机会,就会导致船的数量变多)输入:people = [3,2,2,1], limit = 3。输入:people = [3,5,3,4], limit = 5。解释:4 艘船分别载 (3), (3), (4), (5)解释:3 艘船分别载 (1, 2), (2) 和 (3)首先输入人的数量n,然后输入n个整数,表示人的体重。想要最少的船,也就是让载两人的船尽可能的多。
2025-07-21 20:10:30
299
原创 买卖股票的最佳时机
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3。解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。输入: [7,1,5,3,6,4]输入: [1,2,3,4,5]
2025-07-21 18:08:38
406
原创 有序矩阵中的第 k 个最小数组和
输入:mat = [[1,10,10],[1,4,5],[2,3,6]], k = 7。输入:mat = [[1,3,11],[2,4,6]], k = 5。输入:mat = [[1,3,11],[2,4,6]], k = 9。输入:mat = [[1,1,10],[2,2,9]], k = 7。
2025-07-21 16:57:37
679
原创 LeetCode 71:简化路径
遍历输入的字符串str,若字符不是 '/' 则将字符存进变量tem,否则对变量tem进行判断:若为空或者为 '.' 则将tem赋值为空字符串后遍历str的下一个字符;在处理栈里数据之前,需对tem中的字符串进行最后一次处理,因为输入的字符串结尾也许不是用 '/' 结尾,这时tem中的字符串在上述的循环中得不到处理。输入:"/a//b////c/d//././/.."输入:"/a/../../b/../c//.//"输入:"/a/./b/../../c/"输入:"/home//foo/"
2025-07-17 16:55:09
460
原创 前 K 个高频元素
也可以将自己写的struct的对象放进去。map的特性是map中的元素会按照键的顺序自动排序,但我们用priority_queue的第三个参数实现排序,此时map中的排序不是我们所需的,当然也可以自定义比较函数,但C++提供了更方便的数据类型,所以不用map。若用int来存储数据的频率,最终也能实现存前k个频率最大的元素,但问题是如何实现最终输出的效果为:首先输出频率最高的元素,如果频率相同,则先输出元素值较大的元素?使用map存储键值对,就可以很方便的实现数字与频率的对应,map里的术语是键与值的对应。
2025-07-16 20:44:36
946
原创 字符串解码
若为 ']' 则需要弹出数字栈的栈顶用于复制字符串(此时字符串栈s里存的是前面所有字符串处理后得到的结果,而字符串res则存的是这一次需要复制的字符串,所以只需要进行num.top()次s.top()+=res便完成了此次复制),并将结果复制给res,弹出栈顶。由例子3[a2[c]]可知需要一个存数字的栈和一个存字符串的栈(因为先出现的3后出现的2,先出现的a后出现的c,但结果确实先复制了两个c,得到cc,与acc组成一个字符串,然后复制三次得到了accaccacc)。输入:s = "3[a]2[bc]"
2025-07-15 21:14:15
539
原创 反转每对括号间的子串
用string接收输入的数据,依次遍历该字符串,若不是 ')' 则将字符入栈,否则出栈,一直出到字符为 '(' ,并在出栈的时候将字符存入vector定义的结构里,由于栈的特性是后进先出,所以在出栈进vector的时候就已经完成了反转,然后将反转后的数据再次压入原来的栈里。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。输入:s = "a(bcdefghijkl(mno)p)q"输入:s = "(ed(et(oc))el)"输入:s = "(u(love)i)"
2025-07-15 19:25:39
279
原创 使括号有效的最少添加
若为 ')',则判断栈此时是否为空,若不为空,则弹出栈顶元素,若为空则res++(res用来记录必须添加的最少括号数,并且这种情况下记录的是不合法的 ')'数目 )。字符串处理完成后,若栈不为空,此时栈的长度表示不合法的 ')' 数目,res += 栈的长度便是最终所有不合法的括号数目,即 为使结果字符串有效而必须添加的最少括号数。给定一个由 '(' 和 ')' 括号组成的字符串 S,我们需要添加最少的括号( '(' 或是 ')',可以在任何位置),以使得到的括号字符串有效。输入:"()))(("
2025-07-15 16:21:01
312
原创 链表中的下一个更大节点
每个节点都可能有下一个更大值(next larger value):对于 node_i,如果其 next_larger(node_i) 是 node_j.val,那么就有 j > i 且 node_j.val > node_i.val,而 j 是可能的选项中最小的那个。注意:在下面的示例中,诸如 [2,1,5] 这样的输入(不是输出)是链表的序列化表示,其第一个节点的值为 2,第二个节点值为 1,第三个节点值为 5。输入:[1,7,5,1,9,2,5,1]输出:[7,9,9,9,0,5,0,0]
2025-07-12 17:45:20
628
原创 两两交换链表中的节点
本题可以理解为奇数和偶数的交换(此处的奇偶是结点所处位置,不是数值的奇偶),那么就可以将原链表拆成两个链表,即一个存处于奇数位置上的结点,一个存处于偶数位置的结点。然后依次遍历两链表,先插入偶数链表上的结点,再插奇数链表上的结点,然后让奇偶链表都向后移一个结点,直至两链表为空。可使用以下代码,完成其中的swapPairs函数,其中形参head指向无头结点单链表,返回结果链表的头指针。给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。首先输入链表长度len,然后输入len个整数,以空格分隔。
2025-07-12 16:35:18
282
原创 LeetCode 第61题:旋转链表
输入: 1->2->3->4->5->NULL, k = 2。向右旋转 1 步: 5->1->2->3->4->NULL。向右旋转 2 步: 4->5->1->2->3->NULL。输入: 0->1->2->NULL, k = 4。输出: 4->5->1->2->3->NULL。向右旋转 1 步: 2->0->1->NULL。向右旋转 2 步: 1->2->0->NULL。向右旋转 3 步: 0->1->2->NULL。向右旋转 4 步: 2->0->1->NULL。输出: 2->0->1->NULL。
2025-07-12 15:42:49
724
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人