![](https://img-blog.csdnimg.cn/d6c9ae47ec7448f78a3810d7c8ead190.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
leetcode
平时偶尔刷leetcode的记录
吴天德少侠
这个作者很懒,什么都没留下…
展开
-
【每日一题】503. 下一个更大元素 II
使用单调栈的解法,单调栈里面存的是大于当前元素的index,不是直接存值。但是这个题目是一个循环数组,可以在后面补一段前面的内容,这样就可以正常遍历。将每个位置对应的结果存在map中后面循环结束的时候,如果栈里面还有元素,要么是已经找到了,要么是没有。可以通过find查找是否已经有了对应的key,如果没有就将结果置为-1。原创 2024-06-24 11:07:37 · 151 阅读 · 0 评论 -
【每日一题】522. 最长特殊序列 II
由于数据量比较小,可以使用遍历的方法。最主要的就是按照题目中的定义,实现一个判断a字符串是否是b字符串的子串的方法。原创 2024-06-17 11:20:57 · 170 阅读 · 0 评论 -
刷题·动态规划:2786. 访问数组中的位置使分数最大
【代码】刷题·动态规划:2786. 访问数组中的位置使分数最大。原创 2024-06-14 11:28:06 · 140 阅读 · 0 评论 -
【刷题·二叉树·图】2385. 感染二叉树需要的总时间
我觉得这个题目挺好,既用到了二叉树,还考了图中的建图和广度优先搜索的内容。涉及到的c++内容比如哈希表、集合的使用也比较多。这个题目出的确实有水平。原创 2024-04-24 10:34:50 · 346 阅读 · 0 评论 -
【刷题·二叉树】938. 二叉搜索树的范围和
发现和之前一样,也是递归更好用一点。原创 2024-02-26 17:51:07 · 372 阅读 · 0 评论 -
【刷题·动态规划】322.零钱兑换
【代码】【刷题·动态规划】322.零钱兑换。原创 2023-12-29 17:55:46 · 373 阅读 · 0 评论 -
【刷题·动态规划】最大子序列和
【代码】【刷题·动态规划】最大子序列和。原创 2023-12-29 16:31:05 · 392 阅读 · 0 评论 -
【刷题·队列】迷宫中离入口最近的出口
一开始虽然知道将已经访问过的格子设置为墙,但是没有完全弄清楚是在哪里设置。其实在遍历周围4个点的时候,只要它不是边界空格子,就可以把它设置为墙。我就是在这里超时了。对照着官方题解才找到原因。原创 2023-12-22 17:31:25 · 63 阅读 · 0 评论 -
【刷题·栈】20. 有效的括号
【代码】【刷题·栈】20. 有效的括号。原创 2023-12-20 14:29:25 · 51 阅读 · 0 评论 -
【刷题·链表】两数相加
一开始其实也没想出来,看了题解说可以将提前结束的那条链的值认为是0,才做出来的。原创 2023-12-20 13:48:51 · 39 阅读 · 0 评论 -
【leetcode】2530.执行k次操作后的最大分数
每次都取最大值的策略我是知道的,排序的时间复杂度太高,用栈也不行。没想到c++里面已经内置了优先队列。原创 2023-10-18 10:40:09 · 106 阅读 · 0 评论 -
【leetcode】260.只出现一次的数字Ⅲ
由于只能使用线性时间复杂度。所以map。原创 2023-10-16 09:38:40 · 100 阅读 · 0 评论 -
【leetcode】2578.最小和分割
总的来说,就是转成字符串再拆分为多个数字字符0123....。numsnums。原创 2023-10-09 16:52:49 · 109 阅读 · 0 评论 -
714.买股票的最佳时机含手续费
【代码】714.买股票的最佳时机含手续费。原创 2023-10-06 21:24:33 · 30 阅读 · 0 评论 -
88. 合并两个有序数组
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。如果长数组指针跳出来了,就把剩余的短数组值接到长数组后面。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。原创 2023-08-13 02:27:40 · 190 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
设置头尾指针,将中间值设置root,然后左右两边进行相同的设置,实现一个递归函数,直到头指针位置大于尾指针位置。给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。原创 2023-08-13 01:17:27 · 293 阅读 · 0 评论 -
921.使括号有效的最少添加
leetcode原创 2022-10-04 19:04:51 · 52 阅读 · 0 评论 -
动态规划经典题目三角形最短路径
给一个三角形数组,求最短路径例如:结果原创 2022-06-05 22:06:05 · 706 阅读 · 0 评论 -
【每日一题】70.爬楼梯
前沿在其他地方看到这个题目,感觉蛮有意思。可以通过栈递归做,但是不如直接实现递推公式更省空间公式f(1)=1f(2)=2f(n)=f(n−1)+f(n−2) n≥3f(1)=1\\f(2)=2\\f(n)=f(n-1)+f(n-2)\ n\geq3f(1)=1f(2)=2f(n)=f(n−1)+f(n−2) n≥3代码class Solution {public: int climbStairs(int n) { if (n==1){原创 2022-05-16 08:59:29 · 93 阅读 · 0 评论 -
【每日一题】leetcode-933. 最近的请求次数
933. 最近的请求次数(c++实现)class RecentCounter { queue<int> myqueue;public: RecentCounter() { } int ping(int t) { myqueue.push(t); while (myqueue.front() < t - 3000) { myqueue.pop(); }原创 2022-05-06 17:21:27 · 452 阅读 · 0 评论 -
【每日一题】c++、队列
1823. 找出游戏的获胜者代码(c++)///leetcode1823,找出游戏的获胜者#include<iostream>#include<queue> # 队列using namespace std;class Solution {public: int findTheWinner(int n, int k) { if (n == 1) return 1; queue<int> myqueue; # 队列原创 2022-05-04 22:15:55 · 1628 阅读 · 0 评论 -
【leet_code每日一题】唯一摩尔斯密码词
编程语言python基本思路创建一个字典,键为字母,值为摩斯码。对于给出的单词,遍历每个单词里面的字母,从字典中找出对应的摩斯码,形成每个单词的摩斯码将所有的摩斯码添加到一个列表中通过将列表转为集合进行去重返回集合的长度代码实现class Solution: """ 804, 唯一的摩斯密码 """ def uniqueMorseRepresentations(self, words:list) -> int: mose_code原创 2022-04-10 19:10:45 · 859 阅读 · 0 评论 -
2047. 句子中的有效单词数
class Solution {public: int countValidWords(string sentence) { vector<string> tokens = split(sentence); int ans=0; for (string item:tokens){ bool flag = false; int cnt_ = 0; // -的个数 in.原创 2022-01-27 21:17:43 · 559 阅读 · 0 评论 -
1332. 删除回文子序列
子序列是可以跳着练在一起的,比如,是1个子序列,也是一个子序列。所以只要这个字符串本身不是回文串,那么只要删2次就可以了(先把a全部删掉,再把b全部删掉)class Solution {public: int removePalindromeSub(string s) { for (int i=0; i<s.length()/2; i++){ if (s[i]!=s[s.length()-1-i]){ return原创 2022-01-22 21:19:00 · 152 阅读 · 0 评论 -
219. 存在重复元素 II
排序超时,看了题解写出来。k+1大小的滑动窗里面判断有没有相同元素,其中判断有没有相同元素用散列表来实现,真是巧妙啊。class Solution {public: bool containsNearbyDuplicate(vector<int>& nums, int k) { int lennum = nums.size(); if (lennum==1) return false; unordered_set<i原创 2022-01-19 22:14:34 · 282 阅读 · 0 评论 -
539. 最小时间差
思路:由于一天最多就是分钟,所以可以将字符时间统计转换成整型数组,排个序(),然后遍历一遍数组,取相邻之间差最小的那个()。值得注意的是最后还需要将第1个时间()和最后一个时间比较,更新最小值。cpp:class Solution {public: int findMinDifference(vector<string>& timePoints) { int ans(1439); // cout<<timePoints.原创 2022-01-18 20:59:21 · 276 阅读 · 0 评论 -
1716. 计算力扣银行的钱
算weeks里面算了几次,再加上剩下来的不满一周的天数攒的钱class Solution {public: int totalMoney(int n) { int weeks = n / 7; int days = n - (7 * weeks); int sumDay(0); int firstDay(1); // 第1次存钱的周一存1块,以后的每个周一加1 for (int i = 0; i < w..原创 2022-01-15 10:17:58 · 98 阅读 · 0 评论 -
747. 至少是其他数字两倍的最大数
特殊情况:只有1个元素1. 找出最大值2. 找出第2大的值如果最大值第2大值,说明符合,返回最大值的位置。否则返回-1class Solution {public: int dominantIndex(vector<int>& nums) { if (nums.size() == 1) return 0; // 只有1个元素 // 最大值 int max_num = *max_element(nums.begin原创 2022-01-13 21:05:07 · 104 阅读 · 0 评论 -
334. 递增的三元子序列
贪心算法,尽量使得第1个数和第2个数最小。设第1个数为,第2个数为,从i=1开始遍历,执行:cur_num = nums[i] if (cur_num > second),说明找到了第3个数,返回true else if (cur_num > first),说明cur_num在第1个数和第2个数之间(包括等于第2个数),更新second = cur_num else if (cur_num<first),说明cur_num比第1个数还小,更新first = cur_num 否则原创 2022-01-12 22:01:51 · 84 阅读 · 0 评论 -
1629. 按键持续时间最长的键
这道题第一遍提交的时候,竟然忘了更新最长时间。当事人就是很后悔......class Solution {public: char slowestKey(vector<int>& releaseTimes, string keysPressed) { int timemin = releaseTimes[0]; char res = keysPressed[0]; for (int i = 1; i < release原创 2022-01-09 18:31:44 · 153 阅读 · 0 评论 -
1614. 括号的最大嵌套深度
思路:遇到左括号+1,并用当前括号深度更新最大深度,遇到右括号当前深度-1class Solution {public: int maxDepth(string s) { int maxcnt = 0, cnt = 0; for (char ach : s) { if (ach == '(') { cnt += 1; if (cnt > maxcnt) {原创 2022-01-07 20:40:21 · 246 阅读 · 0 评论 -
1576. 替换所有的问号
今天是一道简单题,我又可以了哈哈哈(狗头.jpg)class Solution {public: string modifyString(string s) { array<char, 26> letters{ 'a','b','c','d','e','f','g', 'h','i','j','k','l','m','n', 'o','p原创 2022-01-05 21:02:18 · 238 阅读 · 0 评论 -
1185. 一周中的第几天
看了题解有蔡勒公式,其实以之前的日期为一个基准点硬算也是可以的。不过我是以今天为基准的,但是不知道怎么过了用例(滑稽.jpg),按理说2022年后的用例应该过不了啊class Solution {public: string dayOfTheWeek(int day, int month, int year) { int totalDays = 0; // 相差的总天数 array<int, 12> monthDays{ 31,28,31,30,31,30,3原创 2022-01-03 14:51:12 · 68 阅读 · 0 评论 -
390. 消除游戏
真的模拟去删超时了。看了题解才写出来的,log(n)的复杂度,确实很强,不需要真的删,记录等差数列的首项就可以。class Solution {public: int lastRemaining(int n) { int a0=1, cnt=n, step=1; bool left=true; // 是否从左开始 while(cnt>1){ if (left==true){ // 从原创 2022-01-02 19:36:40 · 1512 阅读 · 0 评论 -
2022. 将一维数组转变成二维数组
这道题的重点就是二维数组和一维数组的坐标对应。设为一维数组的下标(从0开始),那么二维数组(m,n)下的坐标为:,表示第i行,代表第j列。class Solution {public: vector<vector<int>> construct2DArray(vector<int>& original, int m, int n) { vector<vector<int>> ans; if (原创 2022-01-01 15:47:41 · 471 阅读 · 0 评论 -
507. 完美数
一开始没有考虑到1,这个用例没有通过。class Solution {public: bool checkPerfectNumber(int num) { if (num==1) return false; bool ans = false; int sum(0); for (int i=2; i<=num/2; i++){ if (num%i==0){ sum +=原创 2021-12-31 17:29:07 · 121 阅读 · 0 评论 -
1078. Bigram 分词
这个就是需要用一下cpp字符串分割cpp:class Solution {public: vector<string> findOcurrences(string text, string first, string second) { vector<string> textarry; vector<string> ans; Stringsplit(text,' ',textarry);原创 2021-12-26 10:50:25 · 270 阅读 · 0 评论 -
1609. 奇偶树
用了2个queue,一个用来依次保存左右节点,一个用来判断是否应该level+1。cpp:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * Tree..原创 2021-12-25 14:31:36 · 188 阅读 · 0 评论 -
1154. 一年中的第几天
由于是的标准输入格式,因此需要首先取出年、月、日。利用sstream字符串转数字的功能进行。其次,平年2月28天,润年2月29天,因此还需要判断平、润年。cpp:class Solution {public: int dayOfYear(string date) { stringstream ss1,ss2,ss3; string stryear = date.substr(0,4); string strmon = date.subs原创 2021-12-21 11:32:41 · 134 阅读 · 0 评论 -
475. 供暖器
看了题解之后在纸上画了画才写出来的。可以假设对于每个house左右都有加热器,那么这个house的半径就是min(左加热器,右加热器)。ans则是所有house半径的最大值。初始化ans为0。将heaters从小到大排序,遍历houses,对于houses中的每个house,找到第1个大于house的位置:1. 如果这个位置index等于0,说明heater的第1个数就大于house这个house就只有这1个加热器(右加热器),这个半径就等于,计算ans = max(ans, 这个半径)2. .原创 2021-12-20 20:54:11 · 201 阅读 · 0 评论