上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 15 下一页
摘要: 题目链接 解题思路:单独算i位置的雨水。i位置雨水是多少?max(0, min(左边最大值,右边最大值) - i的值)。关键就是得到min(左边最大值,右边最大值)。 我们先用一个指针left,指向最左,代表左边的最大值,一个指针right,指向最右,代表右边的最大值。 如果left < right 阅读全文
posted @ 2024-12-19 10:40 ouyangxx 阅读(6) 评论(0) 推荐(0)
摘要: 题目链接 解题思路:整体思路就是,我们先假想,[0, n - 1]上,放满了1~n,所以,我们缺失的第一个正数就是n+1。也就是说,i下标,放的数字是i+1。那么我们从左往右遍历的过程中,就尽量满足这种情况 1️⃣如果nums[i] == i + 1,直接跳过,啥都不管 2️⃣如果nums[i] < 阅读全文
posted @ 2024-12-19 10:24 ouyangxx 阅读(25) 评论(0) 推荐(0)
摘要: 题目链接 解题思路:就是一个递归。弄清楚题目意思,n=1时,就返回1,然后n=2时,返回上一个结果,上一个结果是一个1,所以就是11,然后n=3,返回上一个结果,就是两个1,所以就是21 代码 class Solution { public: string countAndSay(int n) { 阅读全文
posted @ 2024-12-18 17:34 ouyangxx 阅读(8) 评论(0) 推荐(0)
摘要: 题目链接 解题思路:整体思路是一个回溯,一行一行填。然后填的过程中可以剪枝,也就是我们可以添加一些约束条件,不能填的时候,就没必要去尝试了(还有一种填法,全部填完之后,再检查是否合规,这样复杂度太大了)。具体细节看代码。 代码 class Solution { public: // 0~8行,0~8 阅读全文
posted @ 2024-12-18 17:13 ouyangxx 阅读(24) 评论(0) 推荐(0)
摘要: 题目链接 解题思路:整体框架就是二分,只是找到了target后,还要继续查找。分两次查找,第一次是「找到等于target最左的位置」,第二次是「找到等于target最右的位置」 代码 class Solution { public: vector<int> searchRange(vector<in 阅读全文
posted @ 2024-12-18 14:53 ouyangxx 阅读(7) 评论(0) 推荐(0)
摘要: 题目链接 解题思路:题目意思是,把原来的有序数组分成两半,左边的放右边来,右边的放左边去,然后数组中是否存在target这个数,存在则返回其下标。 要求时间复杂度O(logn) 整体的框架还是二分查找,但是在查找过程中,我们总能得到「一边」是有序的,例如在整体[L, R]上,划分成两半是[L, x] 阅读全文
posted @ 2024-12-18 14:33 ouyangxx 阅读(25) 评论(0) 推荐(0)
摘要: 题目链接 解题思路:保证一个有效区,当发现一个「新数」时,就扩大有效区。 怎么判断是否是一个新数?来到一个i位置,往左边看,如果相等,则i++,一直到不想等为止。为什么可以这样?因为是有序的。 代码 class Solution { public: int removeDuplicates(vect 阅读全文
posted @ 2024-12-18 11:27 ouyangxx 阅读(16) 评论(0) 推荐(0)
摘要: 题目链接 解题思路:每次从全局的拿一个最小值出来,每个链表的「头」,都是最小的,所以,我们可以使用一个小根堆(优先级队列),存放每个链表当前的「头」,然后弹出一个全局最小的节点出来,然后把该节点的next放回小根堆,供之后使用。 注意,压入小根堆时,要保证不为nullptr。 代码 /** * De 阅读全文
posted @ 2024-12-18 11:12 ouyangxx 阅读(26) 评论(0) 推荐(0)
摘要: 题目链接 解题思路:从左往右生成,生成的过程中,保证右括号不能比左括号多。 代码 class Solution { public: // 总共有n个括号对,left_res就是左括号还能使用的数目,right_res就是右括号还能使用的数目 // 要保证左括号大于等于右括号数目,即left_res 阅读全文
posted @ 2024-12-18 10:59 ouyangxx 阅读(13) 评论(0) 推荐(0)
摘要: 题目链接 解题思路:括号匹配问题,优先想到栈。 代码 class Solution { public: bool isValid(string s) { stack<char> st; for (auto &ch : s) { // 如果是右括号,那么必须得有一个相匹配的左括号 if (ch == 阅读全文
posted @ 2024-12-18 10:51 ouyangxx 阅读(13) 评论(0) 推荐(0)
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 15 下一页