05 2022 档案
摘要:
题目 题解 在力扣 题目62- 不同路径和力扣 题目63- 不同路径II中采用了取每个方块的的左块次数和上块次数 那么我们这次可以改造 原本保存次数的地方 这次应当放入到该位置的最小值 这样最后一格只要比较一下大小加上自己即可 别忘了 上边和左边特殊处理 代码 1 #include<iostream
阅读全文

摘要:
题目 题解 基本思想在62题 我们只要让障碍物在的格子取0即可 代码 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 5 class Solution { 6 public: 7 int uniquePathsWith
阅读全文

摘要:
题目 题解 很经典的动态规划题 dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; 你问我规律怎么来的? 列出来找啊 (笑) 其实就是求 dp[i][j] 那么可以求 有多少到达了他dp[i][j] 上面的那个格子和左边的格子 因为他们只差一步就到达了 代码 1 #inc
阅读全文

摘要:
题目 题解 化繁为简: 说是旋转但是我们观察可以发现其实就是 将倒数第(k % 链表长度)个开始到最后 将这些放在最前面 这里我使用了 vector<ListNode*> v; 去保存每一个ListNode*(当然这里也可以不使用vector) 那么最后置换时 1 (*(v.end() - k -
阅读全文

摘要:
题目 题解 我们只要确定从头确定 在多少位置即可 即 假如n=4 k=9 那么第一位数肯定是 1,2,3,4中的一个 由于k=9 所以根据大小排列以及平分(每个数是6 总排列有24个即4!)可以得到 第一个数应该是2 这样我们将2删掉 后面 继续前面的步骤即可 不过这样看起来很美好 但是根据大小排列
阅读全文

摘要:
题目 题解 在力扣 题目54--螺旋矩阵中我们有了遍历的方法 那么我们修改一下然后 遍历时按照从1开始放入不就可以了 代码 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 int side(vector<vector<
阅读全文

摘要:
题目 题解 从后面开始遍历找到第一个不为空的位置 记录 然后继续遍历直到为空、 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 class Solution { 5 public: 6 int lengthOfLast
阅读全文

摘要:
题目 题解 在力扣 题目56--合并区间中我们有了合并的方法 那么我们不是可以直接让newInterval加入intervals然后执行56题的方法不就行了 复杂度有点高 我们可以根据排列插入这样 能删掉一行sort 然后可以找一下合并的大概区间其他的不用动这样复杂度应该就会大大降低了 (我这里只删
阅读全文

摘要:
题目 题解 思路来自评论区大佬LWQ 将starti与endi 分开 以intervals = [[1,3],[2,6],[8,10],[15,18]]为例 分开之后(注意要排序) starts=[1,2,8,15] ends=[3,6,10,18] 那么我们如下图所示遍历 endsends的对角s
阅读全文

摘要:
题目 题解 我们可以记录一下跳之后的最远距离 并把能够跳到的位置记录 一下 比如我们 vector<int> loop(nums.size(), 0); 当某个数可以被跳入时 对应位置的loop变为1 以3,2,1,0,4为例 一开始跳3 那么我们将 2,1,0 loop位置改为1 这样遍历到4时l
阅读全文

摘要:题目 题解 找四个边的范围然后根据规律放入即可 代码 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 int side(vector<vector<int>>& matrix, vector<int>& result,
阅读全文
摘要:
题目 题解 最大和 返过来说不就是 和为负数的隔开 就可以了 即注意要比较一下最大值 -2,1,-3,4,-1,2,1,-5,4 -2 最大是-2 1,-3 是负数 最大是1 4 -1 2 1 -5 4 最大是6 结果 左边可以和为负数的隔开 代码 1 class Solution { 2 publ
阅读全文

摘要:
题目 题解 翻译一下即对角线 行 列不能出现多个棋子 有点像数组 那么应该用一个其他容器记录 当一个棋子被放入时 导致了哪些位置不能放入 1 vector<vector<int>>Standing(n, vector<int>(n, 0)); 2 for (int j = 1; j < Standi
阅读全文

摘要:
题目 题解 这题应该学过算法的人都熟悉不过了吧 其实只要对半分即可 即n=10;->n=5*5;->n=2*2*1*2*2*1; 也就是说无论n为多少总能变成2和1相乘的形式 那么n=1和n=2就是最基本的形式 要算10就要算5 算5就要算2*2*1 所以我们可以看到需要拿到里面的数才能算出外面的数
阅读全文

摘要:
题目 题解 代码1 使用multiset容器 multiset可以自动排序 1 multiset<int> transformation(string& str) { 2 multiset<int> res; 3 for (int i = 0; i < str.length(); i++) { 4
阅读全文

摘要:
题目 题解 虽然一开始走了弯路 但是竟然莫名其妙发现了规律 即斜反转然后轴反转 斜反转以右对角线 反转 轴反转以中线反转 代码 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 class Solution { 5 pu
阅读全文

摘要:
题目 题解 46. 一看这个题目 发现和 力扣 题目31-- 下一个排列 类似 一个是找下一个 一个是找全部 那么我们把一开始nums进行排序从小到大 然后循环31题的题解 加入vector<vector<int>> res; 如果i为-1则退出 循环即可 47.同上 代码 46 1 #includ
阅读全文

摘要:
题目 1 45. 跳跃游戏 II 2 给你一个非负整数数组 nums ,你最初位于数组的第一个位置。 3 4 数组中的每个元素代表你在该位置可以跳跃的最大长度。 5 6 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 7 8 假设你总是可以到达数组的最后一个位置。 9 10 11 12 示例
阅读全文

摘要:
题目 题解(来自力扣评论区大佬) ps:动态规划还是难啊 没想出来 哭了 在力扣 题目10-正则表达式匹配 下--这题有点难 中使用了动态规划法 即保留之前的结果 在遍历到当前结果时 根据某种规律去找上一次是否匹配 那么这题也是一样 不清楚的可以看这篇 大部分细节一致 可以直接看代码理解 代码 1
阅读全文

摘要:题目 题解(方法来自力扣评论区大佬) 由于这个方法比较难以理解先跟着代码走一步看看吧 以 123*6为例 最后删掉0就是答案 那么思路就有点清楚了 其实就是乘法展开了 1.先拆成一个一个数 然后两个数相乘 2.得到的结果要与之前对应位数的值相加 3.得到的数/10就是进位 4.得到的数%10就是目前
阅读全文
摘要:
题目 题解 1.题目的思路 看见这个题 有点和力扣 题目11- 盛最多水的容器 有点相似 那么我们能不能也用左右指针的方法去做呢? 但是题目要求都不一样 那么左右指针应该代表比较合适呢? 我们可以发现 如下图 当left指向mid的左边最大值 当right指向mid的右边最大值 时 无论是横向计算还
阅读全文

摘要:
题目 题解 1.首先题目中提到我们只需要输出 最小的正整数即可 那么只看正数 0和负数都不看了 2.超过vector长度的数字也不用看 因为最好的结果 也就是1,2,3,4 5是解 也就是说最小的正整数的解 最大也就是vector的长度+1 而超过vector长度的自然也不用管 知道上面两个前提之后
阅读全文

摘要:
题目 题解 在力扣 题目39-- 组合总和中我们做过类似的题 而40题多加了条件 即 有重复数字而且每个数只能选一次 其实我们可以从39题条件转换一下,即无限制重复被选取->有限制重复被选取 例如 candidates = [2,5,2,1,2] 就是 1可以取1次 2可以取3次 5可以取1次 这样
阅读全文
