leetcode
奋力奔跑
这个作者很懒,什么都没留下…
展开
-
51. N 皇后
51. N 皇后LeetCode刷题打卡第033天 (第1篇) 202100811题目链接class Solution { public: vector<vector<string> > solveNQueens(int n) { //n皇后的意思就是任意两个点不同行,不同列,同时不会形成斜对角,所以就是每行每列一定只有一个,那个在n个不同的行不同的列 vector<vector<string原创 2021-08-11 23:34:44 · 94 阅读 · 0 评论 -
79. 单词搜索
79. 单词搜索LeetCode刷题打卡第030天 (第1篇) 20210808题目链接代码class Solution {public: vector<int> direction{-1,0,1,0,-1}; bool exist(vector<vector<char> >& board, string word) { //回溯算法里面出的题 //想到运用深度遍历 int m = board.siz原创 2021-08-09 22:48:36 · 108 阅读 · 0 评论 -
5838. 检查字符串是否为数组前缀
5838. 检查字符串是否为数组前缀LeetCode刷题打卡第027天 (第1篇) 20210805题目链接执行结果易忽视:第一想法时逐个增加单词,同时进行判断字符是否相等,但执行时发现需要考虑的情况过多,没能完全通过代码class Solution {public: bool isPrefixString(string s, vector<string>& words) { string str; int i=0,j;原创 2021-08-08 14:36:19 · 121 阅读 · 0 评论 -
5839. 移除石子使总数最小
5839. 移除石子使总数最小LeetCode刷题打卡第027天 (第1篇) 20210805题目链接注意错误超时,直接循环找出最大值将要超时,因此通过大顶堆来实现代码class Solution {public: int minStoneSum(vector<int>& piles, int k) { priority_queue<int,vector<int>,less<int>> q;原创 2021-08-08 14:08:32 · 108 阅读 · 0 评论 -
1946. 子字符串突变后可能得到的最大整数(251场周赛)
1946. 子字符串突变后可能得到的最大整数(251场周赛)LeetCode刷题打卡第016天 (第2篇) 20210725题目链接注意change 为int型数组,不是字符型(血泪史)请你找出在对 num 的任一子字符串执行突变操作(也可以不执行)后,可能得到的 最大整数 ,并用字符串表示返回。子字符串 是字符串中的一个连续序列。要特别注意第三条,代表的意思是必须连续地替换例如132换位832,而不是835,还有当被替换数与替换数相等时可以发生替换代码class Soluti原创 2021-08-07 21:30:22 · 116 阅读 · 0 评论 -
1945. 字符串转化后的各位数字之和(251场周赛)
1945. 字符串转化后的各位数字之和(251场周赛)LeetCode刷题打卡第016天 (第1篇) 20210725题目链接血泪教训循环是不可首先将字符串转换为数字,因为会越界应该通过通过获得每个字符对应的数字后然后转换为相应的字符串to_string(); //该方法用于将数字转换为字符串代码class Solution {public: int getLucky(string s, int k) { string str; for原创 2021-08-07 20:29:55 · 129 阅读 · 0 评论 -
77. 组合
77. 组合LeetCode刷题打卡第029天 (第3篇) 20210807题目链接思路运用回溯法不区分顺序所以通过让后面的数大于前一个数来排除重复代码1class Solution {public: vector<vector<int>> combine(int n, int k) { // 运用回溯法 //不区分顺序 vector<vector<int> >ans;原创 2021-08-07 18:06:43 · 100 阅读 · 0 评论 -
47. 全排列 II
47. 全排列 IILeetCode刷题打卡第029天 (第2篇) 20210807题目链接思路:运用回溯算法联系46题,本题的难点在于如何判断是否出现重复,因为有相同元素因此本题的需要考虑什么时间将元素入栈重点代码(去重) 参考讲解 if(i>0 && nums[i-1]==nums[i] && !used[i-1]) continue;代码class Solution {public: vector<vector原创 2021-08-07 17:18:21 · 95 阅读 · 0 评论 -
46. 全排列
46. 全排列LeetCode刷题打卡第029天 (第1篇) 20210807题目链接代码class Solution {public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int> > ans; backtrack(nums,0,ans); //传递参数,代表第0层 return ans原创 2021-08-07 15:11:59 · 117 阅读 · 0 评论 -
417. 太平洋大西洋水流问题
417. 太平洋大西洋水流问题LeetCode刷题打卡第028天 (第1篇) 20210806题目链接思路运用递归算法,统计可以同时到达太平洋和大西洋的大陆的位置联系深度遍历,想到可以运用深度遍历虽然题目要求的是满足向下流能到达两个大洋的位置,如果我们对所有的位置进行搜索,那么在不剪枝的情况下复杂度会很高。因此我们可以反过来想,从两个大洋开始向上流,这样我们只需要对矩形四条边进行搜索。搜索完成后,只需遍历一遍矩阵,满足条件的位置即为两个大洋向上流都能到达的位置。代码class S原创 2021-08-06 22:52:17 · 108 阅读 · 1 评论 -
547. 省份数量
547. 省份数量LeetCode刷题打卡第023天 (第1篇) 20210801题目链接代码class Solution {public: int findCircleNum(vector<vector<int>>& isConnected) { int circle=0; int num=isConnected.size(); vector<bool> visited(num,false);原创 2021-08-06 21:12:23 · 73 阅读 · 0 评论 -
695. 岛屿的最大面积
695. 岛屿的最大面积代码class Solution {public: //运用递归进行深度遍历 //1. 首先找出递归边界,超出矩阵边界,所在位置为0 int dfs(vector<vector<int> >& grid, int m,int n){ if((m>=0 && m<grid.size()) && (n>=0 && n<grid[0].si原创 2021-07-31 23:55:45 · 246 阅读 · 0 评论 -
75. 颜色分类
75. 颜色分类LeetCode刷题打卡第019天 (第2篇) 20210728题目链接高阶要求代码class Solution {public: void sortColors(vector<int>& nums) { //不用排序算法, //仅用常数空间的一趟扫描算法 int l=0; int r=nums.size()-1; if(r==0) return;原创 2021-07-28 11:41:26 · 57 阅读 · 0 评论 -
451. 根据字符出现频率排序
451. 根据字符出现频率排序LeetCode刷题打卡第019天 (第1篇) 20210728题目链接思路类似于347题运用优先队列注意事项:3.1 优先队列排列顺序的规定3.2 注意返回值为string3.3定义优先队列时,传递的实参为比较函数所在的类名,不是函数名代码class Solution {public: class cmparison{ public: bool operator()(const pair<char,int原创 2021-07-28 10:11:02 · 62 阅读 · 0 评论 -
347. 前 K 个高频元素
347. 前 K 个高频元素LeetCode刷题打卡第017天 (第1篇) 20210726题目链接思路首先想到运用 map ,但是又意识到map不可以进行排序,它会自动按照key值进行排序,而我们想要的是按照出现的频率进行排序运用优先队列进行找出前k个高频元素,运用小堆运用 unordered_map 存储某数和其出现的频率priority_queue内部实现的原理是堆1.注意优先队列,队列优先级的设置,通过结构体里的函数实现,函数的形参为数值对,因此,我们用pair 做为形参原创 2021-07-26 15:07:50 · 63 阅读 · 0 评论 -
215. 数组中的第K个最大元素
215. 数组中的第K个最大元素LeetCode刷题打卡第016天 (第1篇) 20210725题目链接思路:运用快速排序同时结合二分法代码class Solution {public: int findKthLargest(vector<int>& nums, int k) { //第k大,代表找出第k大的数 //运用快速排序,排除较大的值 //运用二分法,当小于的时候则取右半段,否则取左半端,原创 2021-07-25 10:18:58 · 56 阅读 · 0 评论 -
154. 寻找旋转排序数组中的最小值 II
154. 寻找旋转排序数组中的最小值 IILeetCode刷题打卡第013天 (第2篇) 20210722题目链接思路:题目类似于153,同时类似于84题因为旋转前的数组为非递减的,因此需要分为三种情况进行讨论代码class Solution {public: int findMin(vector<int>& nums) { //找出并返回数组中的最小值,类似于84,153题 //用二分法 int lef原创 2021-07-22 11:37:26 · 70 阅读 · 0 评论 -
153. 寻找旋转排序数组中的最小值
153. 寻找旋转排序数组中的最小值LeetCode刷题打卡第013天 (第1篇) 20210722题目链接思路运用二分法取值图示类似于leetcode 81题代码class Solution {public: int findMin(vector<int>& nums) { //类似于81题 //因为是递增的序列,旋转后分为两个数组且分别为递增序列,因此需要判断所在区间是否为递增的 //原创 2021-07-22 10:52:53 · 81 阅读 · 0 评论 -
81. 搜索旋转排序数组 II
81. 搜索旋转排序数组 IILeetCode刷题打卡第012天 (第2篇) 20210721题目链接总结:查找某个数是否在数组种,运用二分法发生旋转后的数的特点:可以看作分为了两个非递减的数组找出mid数的左右两侧至少有一次为有序的,但是可能判断不出来到底为有序的还是无序的,因此分为三种情况讨论:无法判断是否有序左侧有序右侧有序代码class Solution {public: bool search(vector<int>& nums,原创 2021-07-21 15:45:12 · 94 阅读 · 0 评论 -
34. 在排序数组中查找元素的第一个和最后一个位置
34. 在排序数组中查找元素的第一个和最后一个位置LeetCode刷题打卡第012天 (第1篇) 20210721题目链接代码(二分法)class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { int left=0,right=nums.size()-1; vector<int> ans(2,-1);原创 2021-07-21 11:37:32 · 61 阅读 · 0 评论 -
69. x 的平方根
69. x 的平方根LeetCode刷题打卡第011天 (第2篇) 20210720题目链接代码1二分法注意:有可能最终也没有在循环里找返回值,即该值x不可以开方此时应返回边界值,向下取整class Solution {public: int mySqrt(int x) { if(x==0||x==1) return x; int l=1; int r=x; while(l<=r){原创 2021-07-20 11:26:08 · 78 阅读 · 0 评论 -
524. 通过删除字母匹配到字典里最长单词
524. 通过删除字母匹配到字典里最长单词LeetCode刷题打卡第011天 (第1篇) 20210720题目链接代码1(内存占用大,且运行速度,慢)class Solution { public: static bool cmp(string a,string b){ if(a.size()!=b.size()) return a.size()>b.size(); else return a<b; } string原创 2021-07-20 09:48:39 · 63 阅读 · 0 评论 -
633. 平方数之和
633. 平方数之和LeetCode刷题打卡第010天 (第1篇) 20210719题目链接注意事项: 因为c为int型,所以当c足够大时,可能存在aa+bb的值大于int范围的情况,因此需要定义为long型代码1class Solution {public: bool judgeSquareSum(int c) { long left=0; long right=(int)sqrt(c); long sum; if(原创 2021-07-19 22:59:23 · 111 阅读 · 0 评论 -
76. 最小覆盖子串
76. 最小覆盖子串LeetCode刷题打卡第009天 (第1篇) 20210718题目链接代码class Solution {public: string minWindow(string s, string t) { int right=0,left=0; //窗口的左右边界 int min_l=0; //窗口的左边界 int min_len=s.size()+1; //固定最小窗口的大小 int count=0;原创 2021-07-19 11:51:19 · 82 阅读 · 0 评论 -
5814. 新增的最少台阶数
5814. 新增的最少台阶数LeetCode刷题打卡第008天 (第2篇) 20210717题目链接代码class Solution {public: int addRungs(vector<int>& rungs, int dist) { int count=(rungs[0]-1)/dist; for(int i=1;i<rungs.size();i++){ if(rungs[i]-rungs[i-1原创 2021-07-19 09:15:07 · 80 阅读 · 0 评论 -
5161. 可以输入的最大单词数
5161. 可以输入的最大单词数LeetCode刷题打卡第008天 (第1篇) 20210717题目链接代码class Solution {public: int canBeTypedWords(string text, string brokenLetters) { int b_len=brokenLetters.size(); vector<bool> hash(128,false); //哈希表用来判断字母是否缺失原创 2021-07-19 09:07:41 · 108 阅读 · 0 评论 -
快慢指针(Floyd 判圈法)
快慢指针(Floyd 判圈法)对于链表找环路的问题,有一个通用的解法——快慢指(Floyd 判圈法)。给定两个指针,分别命名为slow 和fast,起始位置在链表的开头。每次fast 前进两步,slow 前进一步。如果fast可以走到尽头,那么说明没有环路;如果fast 可以无限走下去,那么说明一定有环路,且一定存在一个时刻slow 和fast 相遇。当slow 和fast 第一次相遇时,我们将fast 重新移动到链表开头,并让slow 和fast 每次都前进一步。当slow 和fast 第二次相遇时,原创 2021-07-16 10:55:46 · 706 阅读 · 0 评论 -
142. 环形链表 II (快慢指针(Floyd 判圈法))
142. 环形链表 II (快慢指针(Floyd 判圈法))LeetCode刷题打卡第007天 (第1篇) 20210716题目链接快慢指针(Floyd 判圈法)对于链表找环路的问题,有一个通用的解法——快慢指(Floyd 判圈法)。给定两个指针,分别命名为slow 和fast,起始位置在链表的开头。每次fast 前进两步,slow 前进一步。如果fast可以走到尽头,那么说明没有环路;如果fast 可以无限走下去,那么说明一定有环路,且一定存在一个时刻slow 和fast 相遇。当slow 和原创 2021-07-16 10:52:05 · 183 阅读 · 0 评论 -
88. 合并两个有序数组
88. 合并两个有序数组LeetCode刷题打卡第006天 (第2篇) 20210715题目链接解题思路:思路注意nums1中多余的空间全部被填充为了0,因此不能用insert(),否则会扩大nums1的容量由于nums1 和nums2均为有序的,因此可以通过比较从后面开始填充,即填充较大的,依次填充便实现:通过定义三个指针,i 定位nums1的位置, j 定位nums2 的位置,pos定位合并的位值代码class Solution {public: void mer原创 2021-07-15 21:52:02 · 65 阅读 · 0 评论 -
167. 两数之和 II - 输入有序数组
167. 两数之和 II - 输入有序数组LeetCode刷题打卡第006天 20210715题目链接提示:注意到给定的数组为递增的假定现在设定两个下标(双指针问题),左边的为l,右边的为r则当 l 固定时,r 向左移动,number[l]+number[i]逐渐减小当 r 固定时,l 向右移动时,number[l]+number[i]逐渐增大总结:因此当两者的和大于target时,将 r 向左移动,当和小于 target时, 让 l 向右移动代码class Solution原创 2021-07-15 20:24:10 · 64 阅读 · 0 评论 -
406. 根据身高重建队列
406. 根据身高重建队列LeetCode刷题打卡第005天 20210714题目链接知识点引入:string 和 vector支持直接对迭代器进行删减某个数字,如str.begin()+2的写法是合法的list 运用的为链表,所以进行插入和删除的速度比较快,而vector运用的为线性结构,进行插入和删除时移动的数据范围比较大因此当运用list时,速度更快,但是缺点是占用的内存空间更大,因为需要有指针进行表示数据之间的关系;代码1class Solution {public:原创 2021-07-15 17:51:47 · 69 阅读 · 0 评论 -
605. 种花问题
605. 种花问题LeetCode刷题打卡第004天 20210713题目链接代码class Solution {public: bool canPlaceFlowers(vector<int>& flowerbed, int n) { flowerbed.insert(flowerbed.begin(), 0); //在头部和结尾插入0,这样当连续出现3个0时,则可以种植一朵花 flowerbed.insert(flowerbed.原创 2021-07-15 12:33:30 · 63 阅读 · 0 评论 -
435. 无重叠区间
435. 无重叠区间LeetCode刷题打卡第003天 20210712题目链接遇到的问题:怎样进行二维容器的排序,排序是传入的形参为一维容器,且为静态方法;(理解为:intervals.begin()为一个一维容器,代表的含义和二维数组的a[2][2]的a[0]一样,(可理解为{a[0][0],a[0][1]}))//从大到小排序,当左区间相同时,将短的在前面,即为右区间小的在前面 static bool cmp(vector<int> a,vector<int>原创 2021-07-13 23:12:29 · 61 阅读 · 0 评论 -
135. 分发糖果
135. 分发糖果LeetCode刷题打卡第002天 20210711题目链接class Solution {public: int candy(vector<int>& ratings) { int n=ratings.size(); vector<int> left(n); int count=0; for(int i=0;i<n;i++){ if((i>原创 2021-07-11 11:55:39 · 54 阅读 · 0 评论 -
455. 分发饼干
455. 分发饼干LeetCode刷题打卡第001天 20210711题目链接初始代码class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { //为了尽可能满足更多的人,因此需要用最小大于的数分配给这个小孩 int m=-1; int count=0; sort(g.begin(原创 2021-07-11 10:52:01 · 66 阅读 · 0 评论 -
342. 4的幂
LeetCode 342.4的幂思路:我们考虑当一个数为2的n次幂时,其一定是大于0且二进制位上只有一位1,因此我们可以让n与n-1取并看结果是否为0。class Solution {public: bool isPowerOfFour(int n) { return n>0&&(n&(n-1))==0&&(n&(0Xaaaaaaaa))==0; }};class Solution {public:原创 2021-05-31 20:01:03 · 58 阅读 · 0 评论