- 博客(35)
- 收藏
- 关注
原创 每日一题——1833. 雪糕的最大数量
1833. 雪糕的最大数量分类:贪心;排序一趟排序后贪心class Solution { public: int maxIceCream(vector<int>& costs, int coins) { sort(costs.begin(), costs.end()); int ret = 0; for(int i=0; i<costs.size(); i++) { if (coins &
2021-07-02 13:03:00 206 1
原创 随笔-有状态服务、无状态服务
有状态例如,DBMS 数据库管理系统。假设这个服务被移出集群,后集群状态变动,再把服务放回集群,此时服务不能正常工作,因为变动的状态已经缺失应对的方法就是存储
2021-02-24 20:32:36 182
原创 每日一题——561. 数组拆分 I
分类:数组每一对数字选一个最小的出来,能够形成的最大和。即排序后的奇数项(这个项在自己对中是最小的,却又比前一对中最大的大
2021-02-16 12:20:38 158
原创 每日一题——448. 找到所有数组中消失的数字
分类:数组,哈希?将值转换为下标,下标对应的数值+=n(一个原数组不可能出现的值)扫描一遍数组,数值没能大于n的下标即是没有出现的值(因为没有值被转换为这个下标)
2021-02-13 19:05:28 81
原创 每日一题——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 80
原创 每日一题——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 271
原创 每日一题——1423. 可获得的最大点数
分类:前缀和无论怎么选,最终结果都是前`i`个与后`k-i`个的和;可以通过逐步增加后`k-i`个的数量来遍历所有结果
2021-02-06 11:39:44 74
原创 每日一题——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 80
原创 每日一题——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 160
原创 每日一题——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 95
原创 每日一题——959. 由斜杠划分区域
分类:图论、并查集每一个单元格可能被` `、`/`、`\`划分。为了使划分结果一致,将一个单元格看做沿对角线拼成的四个等腰直角三角形,顺时针标号`0 1 2 3`单元格内:如果是` `,连接0123;如果是`/`,连接23 12;如果是..单元格间:每个单元格与自己的右方和下方连接
2021-01-25 11:07:47 221
原创 每日一题——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 72
原创 每日一题——1319. 连通网络的操作次数
一条边如果连接的是同一集合的两个点,那么待使用边++将已经联通的集合看成点,每减少一个未连通点需要一条待使用边
2021-01-23 10:52:06 118 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 76
原创 1489. 找到最小生成树里的关键边和伪关键边
1489. 找到最小生成树里的关键边和伪关键边分类:图论、最小生成树、并查集首先,用正常方法求出生成最小生成树的cost然后遍历每一条边:* 如果去掉这条边,图不连通或者生成树`cost2`>`cost`,那么说这条边是关键边* 如果一开始就连接这条边,生成树`cost2`==`cost`,那么说明这条边是伪关键边* 其他,说明边不需要* 关键边同样满足伪关键边情况,伪关键边同样满足不需要的边的情况,所以依次判断关键边、伪关键边 class UnionFind{private:
2021-01-21 13:51:29 289
原创 每日一题——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 76
原创 每日一题——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 89
原创 每日一题——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 116
原创 每日一题——947. 移除最多的同行或同列石头
947. 移除最多的同行或同列石头分类:图、并查集以前的并查集中,总是元素由一个一元表示,而这次元素由一个二元表示最初的想法是,把行或列相同的点连接,最后点的总数-集合总数就是最多可移除。但是实际上一些例子是无法通过的。暂时想不通为什么。参考题解,做法是将每个石头的行和列连接。我觉得可以这么考虑,如果所有的石头都不同行列,那么二元的每一个位置都没有交集,二元的两个位置相连接,一共有多少个石头就有多少个集合。如果两个石头产生交集,二元连接后就只产生一个集合,视为一个元素。class Solution
2021-01-15 11:39:39 82
原创 每日一题——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 58
原创 每日一题——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 66
原创 每日一题——1203. 项目管理
1203. 项目管理分类:图、拓扑排序这题不会,照着题解做的一个组有一些任务,没有被发配组的任务假设由从m开始递增的唯一组接手(如果不存在没有被分配组的任务,那么这些组接手的任务数量为0,总保持组的数量与任务数量相等)。由于任务与任务存在前后依赖,且同一组的任务需要排在一起。所以通过任务之间的依赖关系形成组之间的依赖关系。故,先对组进行拓扑排序,再依次对组所拥有的任务进行拓扑排序,即为结果class Solution {public: vector<int> topSort
2021-01-12 13:52:06 247
原创 每日一题——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 77
原创 LeetCode周赛——223
223th5649. 解码异或后的数组分类:数学class Solution {public: vector<int> decode(vector<int>& encoded, int first) { vector<int> res(encoded.size() + 1); res[0] = first; for(int i=0; i<res.size()-1; i++){
2021-01-10 16:40:17 139
原创 每日一题——228. 汇总区间
228. 汇总区间分类:数组简单题,但是边界条件挺细节,特别是c++,还要额外注意int的边界,不然 nums[i] == nums[i-1] + 1会overflowclass Solution {public: vector<string> summaryRanges(vector<int>& nums) { vector<string> res; if(nums.size() == 0) return r
2021-01-10 12:40:40 136
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人