![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
vwmin
日月光华,旦复旦兮
展开
-
每日一题——561. 数组拆分 I
分类:数组每一对数字选一个最小的出来,能够形成的最大和。即排序后的奇数项(这个项在自己对中是最小的,却又比前一对中最大的大原创 2021-02-16 12:20:38 · 111 阅读 · 0 评论 -
每日一题——485. 最大连续1的个数
分类:滑动窗口这题挺标准的,记录一下维护区间起止和维护区间长度的两种写法原创 2021-02-15 10:19:10 · 72 阅读 · 0 评论 -
每日一题——448. 找到所有数组中消失的数字
分类:数组,哈希?将值转换为下标,下标对应的数值+=n(一个原数组不可能出现的值)扫描一遍数组,数值没能大于n的下标即是没有出现的值(因为没有值被转换为这个下标)原创 2021-02-13 19:05:28 · 73 阅读 · 0 评论 -
每日一题——703. 数据流中的第 K 大元素
分类:堆维护一个从小到大,大小为k的优先队列,队列的第一个元素就是第k大元素。原创 2021-02-11 10:08:16 · 74 阅读 · 0 评论 -
每日一题——567. 字符串的排列
分类:滑动窗口如果s2窗口内的每个字母的出现次数与s1完全符合,那么ok特例:s1 > s2,必然不会出现子串原创 2021-02-10 10:44:56 · 70 阅读 · 0 评论 -
每日一题——978. 最长湍流子数组
978. 最长湍流子数组分类:滑动窗口不喜欢这种题class Solution {public: int maxTurbulenceSize(vector<int>& arr) { int left = -1; int i=0, j=1, ans=1; for(; j<arr.size(); j++){ if(arr[j-1] < arr[j]){ if(l原创 2021-02-08 15:36:42 · 66 阅读 · 0 评论 -
每日一题——665. 非递减数列
665. 非递减数列分类:数组如果在i处出现了”下落“,可以进行的修改有降低前一个数提高这一个数修改时优先降低前一个数并保持前面序列满足,因为这样不会对数组后面的部分产生影响。同理,只写出提高这一个数,对后续产生了影响的情况。class Solution {public: bool checkPossibility(vector<int>& nums) { int count = 0; for(int i=1; i<nums原创 2021-02-07 11:52:13 · 224 阅读 · 0 评论 -
每日一题——1423. 可获得的最大点数
分类:前缀和无论怎么选,最终结果都是前`i`个与后`k-i`个的和;可以通过逐步增加后`k-i`个的数量来遍历所有结果原创 2021-02-06 11:39:44 · 64 阅读 · 0 评论 -
每日一题——1208. 尽可能使字符串相等
分类:滑动窗口保证窗口不会收缩,留下的长度就是最大长度原创 2021-02-05 11:10:00 · 68 阅读 · 0 评论 -
每日一题——643. 子数组最大平均数 I
分类:滑动窗口维护下窗口长度的子数组和就行原创 2021-02-04 10:41:42 · 71 阅读 · 0 评论 -
每日一题——424. 替换后的最长重复字符
分类:滑动窗口原创 2021-02-02 13:36:20 · 56 阅读 · 0 评论 -
每日一题——888. 公平的糖果棒交换
888. 公平的糖果棒交换分类:数组排序后二分class Solution {public: int binarySearch(vector<int>& B, int t){ int l=0, r=B.size(); while(l<r){ int mid = (l+r) >> 1; if(B[mid] > t){ r = mid;原创 2021-02-01 10:56:24 · 68 阅读 · 0 评论 -
每日一题——839. 相似字符串组
分类:并查集注意提示,所有单词都是字母异位词,另规模较小,暴力比较就行原创 2021-01-31 11:03:09 · 105 阅读 · 0 评论 -
每日一题——778. 水位上升的泳池中游泳
分类:并查集、二分答案、最短路原创 2021-01-30 10:33:23 · 87 阅读 · 0 评论 -
每日一题——1631. 最小体力消耗路径
分类:并查集、二分答案、最短路原创 2021-01-29 11:09:27 · 173 阅读 · 0 评论 -
每日一题——724. 寻找数组的中心索引
724. 寻找数组的中心索引分类:数组左右两边相等也就是2倍等于和嘛class Solution {public: int pivotIndex(vector<int>& nums) { int n = nums.size(), total = 0, left = 0; for(int i=0; i<n; i++){ total += nums[i]; } for(int i=原创 2021-01-28 10:23:25 · 128 阅读 · 0 评论 -
每日一题——1579. 保证图可完全遍历
分类:图论、并查集`type3`对两个图都可用,优先考虑;再分别构建两个图就行意外地不像一个hard原创 2021-01-27 10:41:07 · 86 阅读 · 0 评论 -
每日一题——1128. 等价多米诺骨牌对的数量
1128. 等价多米诺骨牌对的数量分类:哈希对key进行规范class Solution {public: int numEquivDominoPairs(vector<vector<int>>& dominoes) { vector<int> cnt(100); int res=0; for(vector<int>& v:dominoes){ int va原创 2021-01-26 16:50:48 · 87 阅读 · 0 评论 -
每日一题——959. 由斜杠划分区域
分类:图论、并查集每一个单元格可能被` `、`/`、`\`划分。为了使划分结果一致,将一个单元格看做沿对角线拼成的四个等腰直角三角形,顺时针标号`0 1 2 3`单元格内:如果是` `,连接0123;如果是`/`,连接23 12;如果是..单元格间:每个单元格与自己的右方和下方连接原创 2021-01-25 11:07:47 · 171 阅读 · 0 评论 -
每日一题——674. 最长连续递增序列
674. 最长连续递增序列分类:emmmm贪心?不要i也行,换成一个计数记递增长度就好class Solution {public: int findLengthOfLCIS(vector<int>& nums) { if(nums.size() == 0) return 0; int i=0, j=0, n=nums.size(), maxsize=1; while(j<n-1){ if(nu原创 2021-01-24 10:00:11 · 64 阅读 · 0 评论 -
每日一题——1319. 连通网络的操作次数
一条边如果连接的是同一集合的两个点,那么待使用边++将已经联通的集合看成点,每减少一个未连通点需要一条待使用边原创 2021-01-23 10:52:06 · 111 阅读 · 1 评论 -
每日一题——989. 数组形式的整数加法
989. 数组形式的整数加法分类:数学class Solution {public: vector<int> addToArrayForm(vector<int>& A, int K) { int take = 0; vector<int> res; for(int i=A.size()-1; i>=0; i--){ take = A[i] + K%10;原创 2021-01-22 11:50:15 · 68 阅读 · 0 评论 -
1489. 找到最小生成树里的关键边和伪关键边
1489. 找到最小生成树里的关键边和伪关键边分类:图论、最小生成树、并查集首先,用正常方法求出生成最小生成树的cost然后遍历每一条边:* 如果去掉这条边,图不连通或者生成树`cost2`>`cost`,那么说这条边是关键边* 如果一开始就连接这条边,生成树`cost2`==`cost`,那么说明这条边是伪关键边* 其他,说明边不需要* 关键边同样满足伪关键边情况,伪关键边同样满足不需要的边的情况,所以依次判断关键边、伪关键边 class UnionFind{private:原创 2021-01-21 13:51:29 · 226 阅读 · 0 评论 -
每日一题——628. 三个数的最大乘积
628. 三个数的最大乘积分类:数学class Solution {public: int maximumProduct(vector<int>& nums) { sort(nums.begin(), nums.end()); int n = nums.size(); //要么两负一正,要么三正 return max(nums[0]*nums[1]*nums[n-1], nums[n-1]*nums[n-2]*原创 2021-01-20 12:08:46 · 65 阅读 · 0 评论 -
每日一题——1584. 连接所有点的最小费用
1584. 连接所有点的最小费用分类:图、最小生成树Prime算法class Solution {public: int minCostConnectPoints(vector<vector<int>>& points) { int n = points.size(); vector<bool> visited(n, false); vector<int> cost(n, 0);//动态记原创 2021-01-19 11:11:43 · 83 阅读 · 0 评论 -
每日一题——1232. 缀点成线
1232. 缀点成线分类:数学终于来道会的了class Solution {public: bool checkStraightLine(vector<vector<int>>& coordinates) { int deltx = coordinates[1][0]-coordinates[0][0]; int delty = coordinates[1][1]-coordinates[0][1]; doubl原创 2021-01-17 10:37:20 · 89 阅读 · 0 评论 -
每日一题——947. 移除最多的同行或同列石头
947. 移除最多的同行或同列石头分类:图、并查集以前的并查集中,总是元素由一个一元表示,而这次元素由一个二元表示最初的想法是,把行或列相同的点连接,最后点的总数-集合总数就是最多可移除。但是实际上一些例子是无法通过的。暂时想不通为什么。参考题解,做法是将每个石头的行和列连接。我觉得可以这么考虑,如果所有的石头都不同行列,那么二元的每一个位置都没有交集,二元的两个位置相连接,一共有多少个石头就有多少个集合。如果两个石头产生交集,二元连接后就只产生一个集合,视为一个元素。class Solution原创 2021-01-15 11:39:39 · 59 阅读 · 0 评论 -
每日一题——684. 冗余连接
684. 冗余连接树是有n-1条边的图,再增加一条边,某个子图形成环。按照给定的边,依次在并查集中相连,首次出现集合内相连的边,就是形成环的冗余边class Solution {public: int root(int *u, int p){ if (p != u[p]) u[p] = root(u, u[p]); //路径压缩优化 return u[p]; } void connect(int *u, int i, i原创 2021-01-14 11:14:02 · 52 阅读 · 0 评论 -
每日一题——1018. 可被 5 整除的二进制前缀
1018. 可被 5 整除的二进制前缀个位为0或5class Solution {public: vector<bool> prefixesDivBy5(vector<int>& A) { int cur = 0; vector<bool> res(A.size()); for(int i=0; i<A.size(); i++){ cur = ((cur<<1)原创 2021-01-14 10:51:27 · 58 阅读 · 0 评论 -
每日一题——1203. 项目管理
1203. 项目管理分类:图、拓扑排序这题不会,照着题解做的一个组有一些任务,没有被发配组的任务假设由从m开始递增的唯一组接手(如果不存在没有被分配组的任务,那么这些组接手的任务数量为0,总保持组的数量与任务数量相等)。由于任务与任务存在前后依赖,且同一组的任务需要排在一起。所以通过任务之间的依赖关系形成组之间的依赖关系。故,先对组进行拓扑排序,再依次对组所拥有的任务进行拓扑排序,即为结果class Solution {public: vector<int> topSort原创 2021-01-12 13:52:06 · 197 阅读 · 0 评论 -
每日一题——1202. 交换字符串中的元素
1202. 交换字符串中的元素分类:图、并查集同一个连通分量内的字符可任意交换,故各分量内部排序再放回原本位置class Solution {public: int root(int *u, int p){ if (p != u[p]) u[p] = root(u, u[p]); //路径压缩优化 return u[p]; } void connect(int *u, int i, int j){ u[原创 2021-01-11 15:04:58 · 69 阅读 · 0 评论