力扣
文章平均质量分 52
豆沙睡不醒
永远不要停下脚步
展开
-
【力扣·每日一题】2182.构造限制重复的字符串(模拟 贪心 优先队列 C++ Go)
如果在字符串 a 和 b 不同的第一个位置,字符串 a 中的字母在字母表中出现时间比字符串 b 对应的字母晚,则认为字符串 a 比字符串 b 字典序更大。如果字符串中前 min(a.length, b.length) 个字符都相同,那么较长的字符串字典序更大。给你一个字符串 s 和一个整数 repeatLimit ,用 s 中的字符构造一个新字符串 repeatLimitedString ,使任何字母 连续 出现的次数都不超过 repeatLimit 次。你不必使用 s 中的全部字符。原创 2024-01-13 11:00:00 · 1361 阅读 · 1 评论 -
【力扣·每日一题】2085.统计出现过一次的公共字符串(模拟 哈希表 优化 C++ Go)
输入:words1 = [“leetcode”,“is”,“amazing”,“as”,“is”], words2 = [“amazing”,“leetcode”,“is”]给你两个字符串数组 words1 和 words2 ,请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。都只包含小写英文字母。原创 2024-01-12 10:01:55 · 1057 阅读 · 0 评论 -
【力扣·每日一题】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)
给你一个字符串 word ,你可以向其中任何位置插入 “a”、“b” 或 “c” 任意次,返回使 word 有效 需要插入的最少字母数。如果字符串可以由 “abc” 串联多次得到,则认为该字符串 有效。仅由字母 “a”、“b” 和 “c” 组成。个字符构成有效字符串的最小插入数,下标从。原创 2024-01-11 21:12:34 · 1184 阅读 · 1 评论 -
【力扣·每日一题】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
你可以对此字符串执行一些操作,在每一步操作中,你可以从 s 中删除 任一个 “AB” 或 “CD” 子字符串。通过执行操作,删除所有 “AB” 和 “CD” 子串,返回可获得的最终字符串的 最小 可能长度。注意,删除子串后,重新连接出的字符串可能会产生新的 “AB” 或 “CD” 子串。给你一个仅由 大写 英文字符组成的字符串 s。的长度只有100,可以选择暴力的将字符串。用栈维护当前没有删除的字符,遍历字符串,因为栈是先进后出的结果,所以。去掉,直到字符串里没有。语言实现的代码,调用。原创 2024-01-10 10:29:13 · 951 阅读 · 0 评论 -
【力扣·每日一题】1774. 最接近目标价格的甜点成本 (dfs搜索 动态规划 Go)
题目链接你打算做甜点,现在需要购买配料。目前共有 n 种冰激凌基料和 m 种配料可供选购。而制作甜点需要遵循以下几条规则:必须选择 一种 冰激凌基料。可以添加 一种或多种 配料,也可以不添加任何配料。每种类型的配料 最多两份 。给你以下三个输入:baseCosts ,一个长度为 n 的整数数组,其中每个 baseCosts[i] 表示第 i 种冰激凌基料的价格。toppingCosts,一个长度为 m 的整数数组,其中每个 toppingCosts[i] 表示 一份 第 i 种冰激凌配料的价格。t原创 2022-12-04 16:33:47 · 352 阅读 · 0 评论 -
【力扣·每日一题】1796. 字符串中第二大的数字(一次遍历 map标记)
题目链接给你一个混合字符串 s ,请你返回 s 中 第二大 的数字,如果不存在第二大的数字,请你返回 -1 。混合字符串 由小写英文字母和数字组成。思路1:用map存储0~9每个数字是否出现过,然后再从9开始倒序遍历,如果说当前是出现的第二个数字的话就返回当前值;思路2:将答案用first,second两个变量记录,分别表示第一大数字和第二大数字。原创 2022-12-03 19:46:30 · 147 阅读 · 0 评论 -
【力扣】1106. 解析布尔表达式(C++/Go 栈的应用)
&(expr1,expr2,…)”,运算过程为对 2 个或以上内部表达式 expr1, expr2, …进行逻辑 与的运算(AND)“|(expr1,expr2,…)”,运算过程为对 2 个或以上内部表达式 expr1, expr2, …进行逻辑 或的运算(OR)给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果。(expr)”,运算过程为对内部表达式 expr 进行逻辑 非的运算(NOT)“f”,运算结果为 False。“t”,运算结果为 True。原创 2022-11-06 14:46:40 · 631 阅读 · 2 评论 -
【力扣】1620. 网络信号最好的坐标 (Go 遍历)
数组 towers 中包含一些网络信号塔,其中 towers[i] = [xi, yi, qi] 表示第 i 个网络信号塔的坐标是 (xi, yi) 且信号强度参数为 qi。如果一个坐标跟塔的距离在 radius 以内,那么该塔的信号可以到达该坐标。如果第 i 个塔能到达 (x, y) ,那么该塔在此处的信号为 ⌊qi / (1 + d)⌋ ,其中 d 是塔跟此坐标的距离。一个坐标的 信号强度 是所有 能到达 该坐标的塔的信号强度之和。如果有多个坐标网络信号一样大,请你返回字典序最小的 非负 坐标。原创 2022-11-02 23:27:21 · 124 阅读 · 0 评论 -
【力扣】1662. 检查两个字符串数组是否相等(Go 一行代码版)
给你两个字符串数组 word1 和 word2。如果两个数组表示的字符串相同,返回 true;否则,返回 false。数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。原创 2022-11-01 21:18:07 · 264 阅读 · 0 评论 -
【力扣】1700. 无法吃午餐的学生数量(思维 Go/C++实现)
学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个 栈 里,每一轮:如果队列最前面的学生 喜欢 栈顶的三明治,那么会 拿走它 并离开队列。否则,这名学生会 放弃这个三明治 并回到队列的尾部。这个过程会一直持续到队列里所有学生都不喜欢栈顶的三明治为止。原创 2022-10-19 21:47:36 · 371 阅读 · 0 评论 -
【力扣 · 每日一题】1582. 二进制矩阵中的特殊位置 (枚举 + Go实现)
特殊位置 定义:如果 mat[i][j] == 1 并且第 i 行和第 j 列中的所有其他元素均为 0(行和列的下标均 从 0 开始 ),则位置 (i, j) 被称为特殊位置。给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j] 是 0 或 1,请返回 矩阵 mat 中特殊位置的数目。枚举每一个元素,如果当前元素的值为1并且所在行的和跟所在列的和都为1,那么就表示所在行跟所在列只有本身一个元素为1,符合题意。维护每一行的和跟每一列的和。原创 2022-09-04 14:22:52 · 165 阅读 · 0 评论 -
【力扣·每日一题】429. N 叉树的层序遍历(C++ bfs)
题目链接题意给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。思路采用bfs,用m记录队列的大小,这也就是这层的节点个数,然后遍历这m个节点,将这m个节点的值放入答案里,并且将子节点放入队列里。代码/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) {原创 2022-04-08 08:03:10 · 1295 阅读 · 0 评论 -
【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先 (C++ 递归)
题目链接题意求二叉树里两个节点的最近公共祖先思路递归求解。如果当前节点为空,说明已经遍历到了叶子节点的下个节点,返回空。如果当前节点等于p或q,说明当前节点就是最近公共祖先,返回root;否则,递归求当前节点的左子树、右子树里,两者的最近公共祖先。如果左子树的lca为空,说明两者都在右子树里,则lca为右子树的lca返回值。否则,如果右子树的lca为空,说明两者都在左子树里,则lca为左子树的lca返回值;否则,说明两者分列root两侧,root就是lca。代码/** * Defin原创 2022-04-01 10:51:11 · 1168 阅读 · 0 评论 -
【LeetCode】958. 二叉树的完全性检验(C++ 二叉树 BFS)
题目链接题意判断给出的二叉树是否为完全二叉树思路进行bfs,在遇到空节点的时候标记flag为1,表示遇到了空节点。每次都将所有节点放入队列,如果再次遇到flag为1,说明不是完全二叉树。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0),原创 2022-04-01 10:33:33 · 1137 阅读 · 0 评论 -
【力扣·周赛】第 284 场周赛(C++ | 枚举 | 分类讨论 | 最短路 | 建反图)
6031. 找出数组中的所有 K 近邻下标题意给你一个下标从 0 开始的整数数组 nums 和两个整数 key 和 k 。K 近邻下标 是 nums 中的一个下标 i ,并满足至少存在一个下标 j 使得 |i - j| <= k 且 nums[j] == key 。以列表形式返回按 递增顺序 排序的所有 K 近邻下标。1<=nums.length<=10001 <= nums.length <= 10001<=nums.length<=1000思路数组大小原创 2022-03-13 22:29:28 · 2040 阅读 · 0 评论 -
【力扣·周赛】第 283 场周赛(C++)
6016. Excel 表中某个范围内的单元格题目链接题意思路模拟就可,要注意第一层循环的是字母,第二层循环的是数字,范围就是题目里给出字符串的第一个和第二个单元格的范围。每次将组合后的答案保存到vector里。代码class Solution {public: vector<string> cellsInRange(string s) { vector<string>ans; for(int j=s[0]-'A';j<=原创 2022-03-06 14:01:16 · 624 阅读 · 0 评论 -
【力扣·周赛】第 282 场周赛(C++)
2185. 统计包含给定前缀的字符串题目链接题意返回 words 中以 pref 作为 前缀 的字符串的数目。思路words的数据范围为100,遍历words里的每个字符串,用substr函数判断前缀是否跟pref相等即可。时间复杂度O(n)O(n)O(n)代码class Solution {public: int prefixCount(vector<string>& words, string pref) { int ans=0;原创 2022-02-28 20:17:48 · 707 阅读 · 0 评论 -
【剑指offer】剑指 Offer 03. 数组中重复的数字 (C++ 哈希 遍历)
题目链接题意:给出一个数组,求出任意一个重复的数字。思路:用mapmapmap维护每个数字出现的次数。遍历数组,每次让该数字xxx出现的次数+1+1+1如果mp[x]>1mp[x]>1mp[x]>1,说明该数字在以前就出现过,为重复的数字,答案为该数字。代码:class Solution {public: int findRepeatNumber(vector<int>& nums) { map<int,int>mp原创 2022-01-17 15:54:53 · 495 阅读 · 2 评论 -
【剑指offer】剑指 Offer 10- I. 斐波那契数列 (C++ 模拟 取余)
题目链接题意:给出nnn,求出斐波那契数列第n项,值取余1e9+71e9+71e9+7思路:斐波那契数列递推公式为:f[0]=0,f[1]=1f[0]=0,f[1]=1f[0]=0,f[1]=1f[n]=f[n−1]+f[n−2](n>2)f[n]=f[n-1]+f[n-2] (n>2)f[n]=f[n−1]+f[n−2](n>2)特判n<=1n<=1n<=1的情况对于其他情况,for循环求就可以。假设ccc就是答案,aaa是前两项,bbb是前一项。每原创 2022-01-17 15:42:06 · 439 阅读 · 0 评论 -
【剑指offer】剑指 Offer 09. 用两个栈实现队列(C++ 模拟 栈 队列)
题目链接题意:用两个栈模拟队列,要求实现插入和删除操作。思路:栈的特点:先进后出队列的特点:先进先出所以用一个栈stk1维护插入操作,一个栈stk2维护删除操作。插入的时候,插入到栈stk1里。删除的时候,弹出栈stk2的元素。如果stk2为空的话,将stk1里的所有元素弹入stk2里,这样stk2的元素顺序就是队列删除元素的顺序,符合队列先进先出的特性。还有几个小细节:构造函数里要将两个栈清空;删除的时候,如果stk1也为空的话,则返回-1代码:class CQueue {pu原创 2022-01-17 15:26:27 · 495 阅读 · 0 评论 -
【 LeetCode 热题 HOT 100】4. 寻找两个正序数组的中位数 (C++ 遍历 分类讨论)
题目链接题意:寻找两个已经从小到大排好序的数组的中位数。思路:大概是比较投机取巧的一种方法,时间复杂度为O(n)O(n)O(n)的。先计算两个数组的元素个数总和,分奇偶讨论。如果是奇数的话,中位数是第(sum+1)/2个数;否则,是中间两个数的平均数。分别设两个指针tx,ty,用来遍历两个数组。每次都让当前数的指针前移。最后维护下中位数就好了~代码:class Solution {public: double findMedianSortedArrays(vector&l原创 2022-01-17 13:41:23 · 200 阅读 · 0 评论 -
【 LeetCode 热题 HOT 100】3. 无重复字符的最长子串 (C++ 哈希 思维)
题目链接题意:给出一个字符串(长度为5e4),求没有重复字符的最长连续串。思路:由于长度为5e4,考虑O(n)O(n)O(n)的遍历。用map存储在当前位置之前该字符的最后一次出现的位置是第几个。las表示如果以当前字符串为结尾,能够保证不重复的位置。i-las+1就是以当前字符串结尾的答案。取最大值就好了。代码:class Solution {public: int lengthOfLongestSubstring(string s) { int ans=0,原创 2022-01-17 12:59:28 · 187 阅读 · 0 评论 -
【 LeetCode 热题 HOT 100】2. 两数相加 (C++ 链表 模拟)
题目链接题意:给出两个非空的链表,表示两个非负整数。求两数相加的和。答案也是链表形式。数据范围:思路:由于题目的数据范围表明了每个链表的节点数在范围[1,100]内,也就是说对于C++来说,是无法用变量存储的,所以首先排除掉直接计算的可能。加法本质上就是一种模拟,本位的数相加后,保存进位是多少,再继续计算下一位。对于链表来说,要先设置头指针resresres,用于自己返回答案。设立尾指针ansansans,用于添加新的节点,记录答案。同时遍历两个链表,如果某个节点已经为空,那么说明该节点原创 2022-01-17 12:06:18 · 306 阅读 · 0 评论 -
【力扣·每日一题】1036. 逃离大迷宫 (C++ bfs 思维)
linkkk添加链接描述题意思路常规最短路可以通过bfs解决,但是这个图的范围为1e6∗1e61e6*1e61e6∗1e6,bfs的复杂度为O(1e12)O(1e12)O(1e12),会超时。障碍的大小只有200个,从障碍入手考虑起点终点无法到达的情况就是起点被障碍包围或终点被障碍包围。障碍斜着放包围的格子最多,为n∗(n−1)/2n*(n-1)/2n∗(n−1)/2个所以如果从起点出发,经过的格子数大于这个的话说明起点没有被障碍包围。同理,终点也这样。如果在过程中,就已经到达终点的话,那原创 2022-01-11 16:00:35 · 290 阅读 · 0 评论 -
【力扣·每日一题】1629. 按键持续时间最长的键 (C++ 模拟)
1629原创 2022-01-09 15:47:26 · 352 阅读 · 0 评论 -
【力扣·每日一题】1576. 替换所有的问号(C++ 字符串模拟 思维)
代码:class Solution {public: string modifyString(string s) { char ans[]={'a','b','c'}; for(int i=0;i<s.size();i++){ if(s[i]=='?'){ if(i==0){ for(int j=0;j<3;j++){原创 2022-01-05 18:40:40 · 665 阅读 · 0 评论 -
【力扣·每日一题】913. 猫和老鼠(C++ 记忆化搜索 博弈)
linkk题意:思路:采用记忆化搜索,dp[t][x][y]表示走了t步后老鼠在x猫在y时的状态。初始将dp数组都设为-1,表示未被经过。dfs搜索,传的参数未当前的步数t,老鼠的位置x,猫的位置y。然后进行判断:如果当前的步数>=2n 返回0平局如果x=y 则猫赢 返回2如果x=0 老鼠赢 返回1对老鼠而言,遍历相邻的节点时 如果返回值为1 则老鼠肯定赢;如果返回值为2,则老鼠可以不走这一步;如果返回值为0,则可能是平局,但猫一定赢不了,所以标记flag=false;最后判断f原创 2022-01-04 10:42:39 · 934 阅读 · 0 评论 -
【力扣·每日一题】2022. 将一维数组转变成二维数组(C++ 模拟 vector)
linkk题意思路只用vector的基本操作push_back和size就可以完成本题。用二维vector存储答案,tmp表示一行的数。遍历给出的original数组,将元素放到tmp里每次对tmp里的元素个数进行判断,如果tmp的元素个数等于n的话,说明应该放到下一行了,就将当前tmp放入ans里,清空tmp。代码class Solution {public: vector<vector<int>> construct2DArray(vector<原创 2022-01-01 14:21:28 · 884 阅读 · 0 评论 -
【力扣·每日一题】507. 完美数 (C++ 模拟 数的因子)
linkk题意:思路:num<=1e8num<=1e8num<=1e8,所以用sqrt(num)sqrt(num)sqrt(num)的复杂度枚举所有的因子进行判断即可。对于任意的nummod i=0num\mod i=0nummodi=0,要加上iii;如果i!=num/ii!=num/ii!=num/i的话,那么就再加上num/inum/inum/i.注意要特判111的情况。代码:class Solution {public: bool checkPerfec原创 2021-12-31 17:11:33 · 2482 阅读 · 0 评论 -
【力扣·每日一题】630. 课程表 III (C++ 贪心 优先队列)
贪心,????都不学原创 2021-12-14 21:38:41 · 926 阅读 · 0 评论 -
【力扣·每日一题】807. 保持城市天际线(C++ 贪心)
【力扣·每日一题】807. 保持城市天际线(C++ 贪心)原创 2021-12-13 07:58:25 · 772 阅读 · 2 评论 -
【力扣·每日一题】709. 转换成小写字母(C++ 模拟)
linkk题意:代码:class Solution {public: string toLowerCase(string s) { for(int i=0;s[i];i++){ if(s[i]>='A'&&s[i]<='Z') s[i]+=32; } return s; }};原创 2021-12-12 10:40:06 · 479 阅读 · 0 评论 -
【力扣·每日一题】911. 在线选举(C++ 二分 STL)
linkkk题意:思路:用vector<int>vvector<int>vvector<int>v记录每个时刻的获胜者,对于每次询问都在timestimestimes里二分查找小于等于该时刻的最大时刻,这时候的获胜者就是这次的答案,。代码:class TopVotedCandidate {public: vector<int>v,tt; map<int,int>mp; TopVotedCandidate(vec原创 2021-12-11 13:31:20 · 482 阅读 · 0 评论 -
【力扣·每日一题】748. 最短补全词(C++ 模拟)
【力扣·每日一题】748. 最短补全词(C++ 模拟)原创 2021-12-10 13:04:18 · 491 阅读 · 0 评论 -
【力扣·每日一题】794.有效的井字游戏(模拟)
题意思路:判断步数是否合法,xxx和ooo数量意义或ooo比xxx多一。再判断两种合法的步数是否为对应的一方赢。判断是否赢就是遍历每行每列和对角线是否是三个一样的,代码:class Solution {public: bool validTicTacToe(vector<string>& board) { int x=0,o=0; for(string s:board){ for(char t:s){原创 2021-12-09 23:10:26 · 2349 阅读 · 0 评论 -
【力扣·每日一题】689. 三个无重叠子数组的最大和 (C++ 前缀和优化dp 保存路径)
dp转移,前缀和优化。多加一个$pre$的数组存储路径。原创 2021-12-08 19:35:54 · 550 阅读 · 0 评论 -
【力扣·每日一题】1034. 边界着色(C++ dfs 二维vector)
【力扣·每日一题】1034. 边界着色(C++ dfs 二维vector)原创 2021-12-07 18:44:59 · 557 阅读 · 0 评论 -
【力扣·每日一题】1816. 截断句子(模拟)
【力扣·每日一题】1816. 截断句子(模拟)原创 2021-12-06 21:15:44 · 118 阅读 · 0 评论 -
【力扣·每日一题】372. 超级次方(欧拉降幂 快速幂)
linkk题意:思路:欧拉降幂公式为:abmod p=abmod phi(p)mod pa^b\mod p=a^{b\mod phi(p)} \mod pabmodp=abmodphi(p)modp其中ppp为质数,phi(p)phi(p)phi(p)为ppp的欧拉函数由于题目里给出的ppp是固定的133713371337,所以其欧拉函数值为114011401140,可以求出bmod phi(p)b\mod phi(p)bmodphi(p)的值。再用快速幂求剩下的值就可以了代码:原创 2021-12-05 11:58:08 · 308 阅读 · 0 评论 -
【力扣·每日一题】383. 赎金信 (模拟)
linkk用数组记录magazine中每个字母出现的次数,再去比对ransomNote中的每个字母,每次让该字母的出现次数减一,表示可用的字母次数。如果碰到某字母的可用次数<=0<=0<=0即为不合法情况class Solution {public: bool canConstruct(string ransomNote, string magazine) { int mp[27]; memset(mp,0,sizeof mp);原创 2021-12-04 16:36:08 · 201 阅读 · 0 评论