![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
=====LeetCode=====
Qingo呀
老菜鸡。
展开
-
LeetCode 726. 原子的数量(栈+模拟)
题链:https://leetcode-cn.com/problems/number-of-atoms/思路:先筛出每一项(数字、左括号、右括号、原子四种之一),放入栈。再用另一个栈维护乘过的倍数、当前倍数等信息。详情请看注释。class Solution {public: struct node{ string atom; int num; friend bool operator <(node a,node b){原创 2021-07-06 18:44:34 · 267 阅读 · 0 评论 -
LeetCode 483. 最小好进制(二分+数学)
题链:https://leetcode-cn.com/problems/smallest-good-base/思路一(二分)n=k0+k1+k2+...+kmn=k^0+k^1+k^2+...+k^mn=k0+k1+k2+...+kmk最小为2,所以m的最大值为log2(n)log2(n)log2(n),即m最大64(n<=1e18)。具体思路为枚举m,二分k(k越大,n越大,有单调性)。class Solution {public: long long getNum(string原创 2021-07-02 21:44:37 · 210 阅读 · 0 评论 -
LeetCode 每日一题 剑指 Offer 37. 序列化二叉树
题链:https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof/思路 :想复杂了,虽然必须有中序才可以唯一确定一棵树(自己写的是中序+先序)。但是,只要是同一逻辑,即可确定一个树,直接先序遍历编码即可。注意:队列传入的时候要加引用,靠!!/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;原创 2021-07-02 17:43:45 · 212 阅读 · 0 评论 -
LeetCode 剑指 Offer 09. 用两个栈实现队列 LCOF(思维)
题链:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/思路1本人模拟法,时间最坏O(N2)O(N^2)O(N2),不建议使用。每次删除时,先把当前栈所有元素放入新的栈,把新栈栈顶元素弹出。再把新栈元素放入当前栈。class CQueue {public: stack<int> s1,s2; CQueue() { } void a原创 2021-07-02 16:39:32 · 188 阅读 · 0 评论 -
LeetCode 每日一题 168. Excel Sheet Column Title(数学)
题链:https://leetcode-cn.com/problems/excel-sheet-column-title/内容:将数字变为Excel表格字母的方式。先考虑字母转数字num=a0+a1∗261+a2∗262+a3∗263+...+an−1∗26n−1num=a_0+a_1*26^1 + a_2*26^2+a_3*26^3+...+a_n-1*26^{n-1}num=a0+a1∗261+a2∗262+a3∗263+...+an−1∗26n−1这和26进制特别像,但需要注意的是1原创 2021-07-02 16:18:00 · 95 阅读 · 0 评论 -
LeetCode 每日一题 135. Candy (单/双向BFS)
题链:https://leetcode-cn.com/problems/open-the-lock/思路:常规BFS。(1)单向class Solution {public: struct node{ string now; int step; }; int openLock(vector<string>& deadends, string target) { map<string,bool&g原创 2021-07-02 13:16:46 · 81 阅读 · 0 评论 -
LeetCode 每日一题 135. Candy (前缀后缀)
题链:https://leetcode-cn.com/problems/candy/题意和思路:与几年秋季的PAT甲级的第一题类似。传送门class Solution {public: int candy(vector<int>& a) { int n = a.size(); if(n==0) return 0; int pre[n]; int suf[n]; pre[0]=0;原创 2020-12-24 22:29:26 · 105 阅读 · 0 评论 -
LeetCode 3. Longest Substring Without Repeating Characters (dp或预处理)
题链:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/题意:求没有重复数的最长连续子序列。思路:dp[i]表示以i为结尾的最长子序列的首位置下标转移方程:dp[i]=max(dp[i-1],pre[a[i]]+1)初值:dp[0]=0pre[a[0]]=0pre[other]=-1const int N = 5e4+10;int dp[N];class原创 2020-12-24 22:24:41 · 93 阅读 · 0 评论 -
LeetCode 每日一题 714. Best Time to Buy and Sell Stock with Transaction Fee (dp)
题链:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/题意:告诉接下来n天的股票价格,每天手里最多能有一股股票,每进行一次买加卖股票需要一定的手续费,问最大利润。思路:如果没有手续费的话,可直接贪心,最低的时候买,升到最高卖。但是有了手续费就不行了,考虑dp。dp[i][0]:表示第i天手里没股票的最大利润dp[i][1]:表示第i天手里有股票的最大利润转移方程:原创 2020-12-24 22:11:17 · 172 阅读 · 0 评论 -
LeetCode 每日一题 316. Remove Duplicate Letters (单调栈)
题链:https://leetcode-cn.com/problems/remove-duplicate-letters/题意:保持相对位置不变,是每个字符只出现一次。求字典序最小的答案。思路:维护一个单调递减的不重复的栈,注意弹出栈顶时要保证后面还有栈顶字符。class Solution {public: string removeDuplicateLetters(string s) { int n = s.size(); bool book[26]原创 2020-12-24 21:34:42 · 99 阅读 · 0 评论 -
LeetCode 4. Median of Two Sorted Arrays (二分)
题链:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/题意:求两个升序数组合并之后的中位数思路:问题可以转化为求两个升序数组合并之后第k小的数。假设有a[0...k/2-1...n],b[0...k/2-1...m]1.如果a[k/2-1]<b[k/2-1],那么我们可以“删除” a[0...k/2-1],从剩下的数中找第k-k/2小的数。2.如果a[k/2-1]>b[k/2-1],那么我们可以“删除”原创 2020-12-24 21:24:44 · 135 阅读 · 0 评论 -
LeetCode 649. Dota2 参议院 (模拟+队列)
题链:https://leetcode-cn.com/problems/dota2-senate/我的思路:模拟错了n发,太菜了。。。。。。。有权利投票的话,先把后面的对手ban掉,后面没有对手了的话再ban前面的对手。我用的字符串模拟的,最后看一下哪个阵营先为空即可(不知道为啥,跑的还挺快)。实现1:class Solution {public: string predictPartyVictory(string s) { while(1){ .原创 2020-12-11 10:48:16 · 153 阅读 · 0 评论 -
LeetCode 每日一题 659. 分割数组为连续子序列 (贪心)
题链:https://leetcode-cn.com/problems/split-array-into-consecutive-subsequences/思路:太菜了太菜了,我贪错了,卡在倒数第3个测试点。正确思路首先要明白,连续的子序列,我们可以考虑用序列的最后一个数以及序列的长度表示。贪心思路1:那么对于一个数x,我们肯定优先考虑以他为结尾。那么就要看看有没有以x-1为结尾的序列,如果有,为了使所有序列长度都大于等于3,肯定将x加以x-1为结尾的最短的序列上;如果没有以x-1结尾的序列,那么只原创 2020-12-04 11:24:07 · 306 阅读 · 0 评论 -
LeetCode 每日一题 321. 拼接最大数(dp或单调栈)
题链:https://leetcode-cn.com/problems/create-maximum-number/我的思路(超时):力扣有的题没有数据范围,这是很烦的,但是我dp弱,记录一下吧。dp[i][j][k]代表第一个数组的前i个数,第二个数组的前j个数拼接成k个数的序列的最大值。转移方程:dp[i][j][k]=max{ dp[i-1][j-1][k] ,dp[i-1][j][k-1]+a[i-1] ,dp[i][j-1][k-1]+b[j-1]} (PS:i-1,j-1是因为我..原创 2020-12-02 20:30:09 · 267 阅读 · 0 评论 -
LeetCode 每日一题 767. 重构字符串 (优先队列+贪心)
题链:https://leetcode-cn.com/problems/reorganize-string/我的思路:我考虑的是插空法。首先,按插空法,假设一个字母出现的次数为k,那么我们需要k-1个其他字母将他们分开,所以如果一个字母出现次数n-k>k-1,否则就无法重构。贪心策略就是每次弹出出现次数最多的字母a(假设有k个)。首先用掉一个,剩下k-1个,每一个之前都放一个当前优先队列中出现次数最多的字符b,如果b还有再将它放入队列。struct node{ int pos,num原创 2020-11-30 15:35:30 · 181 阅读 · 0 评论 -
LeetCode 每日一题 164. 最大间距 (基数排序)
题链:https://leetcode-cn.com/problems/maximum-gap/思路:基数排序O(n)代码:class Solution {public: int getd(int x){ int ans=0; while(x){ ans++; x/=10; } return ans; } int getkd(int x,int k){原创 2020-11-28 21:15:12 · 125 阅读 · 0 评论 -
LeetCode 每日一题 406. 根据身高重建队列
题链:https://leetcode-cn.com/problems/queue-reconstruction-by-height/我的思路:按身高从小到大排序,相等则按k从小到大。每次按k找到他应该在的位置即可,首先他前面的都对他产生影响,减去这些影响后,就是他应该在的位置(第几个空位),注意身高相等的对他的影响。时间O(n^2).class Solution {public: struct node{ int h,k; }b[1110]; sta原创 2020-11-28 21:13:08 · 182 阅读 · 0 评论 -
LeetCode 每日一题 514. 自由之路 (dp)
题链:https://leetcode-cn.com/problems/freedom-trail/思路:n最多100,O(n^3)毫无压力。dp[i][j]:表示转到第i个字符时在位置j的最小步数。显然dp[i][j]=min{dp[i-1][j1]+abs(i-j1)};class Solution {public: struct node{ int pos,d; }; vector<int> po[30]; int dp[101][101]; int原创 2020-11-28 21:00:57 · 90 阅读 · 0 评论 -
LeetCode 每日一题 122. 买卖股票的最佳时机 II (思维)
题链:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/思路:涨了就卖,跌了啥也不干。(这里巧妙的运用了 a[i]-a[i-2]=a[i]-a[i-1]+a[i-1]-a[i-2])。class Solution {public: int maxProfit(vector<int>& a) { int ans=0,now=0; for(int i=1;i<a.si原创 2020-11-28 20:53:42 · 126 阅读 · 0 评论 -
LeetCode 每日一题 327. 区间和的个数 (归并排序/树状数组)
题链:https://leetcode-cn.com/problems/count-of-range-sum/思路1:对前缀和(一定要加上0!!!!!!)归并排序,每次先统计答案再合并区间。class Solution {public: int ans,n; int low,up; void solve(vector<long long>& a,int l,int r){ if(l==r) return ; int m=(l+r)>>1; sol原创 2020-11-28 20:49:58 · 176 阅读 · 0 评论 -
LeetCode 每日一题 57. 插入区间 (思维)
题链:https://leetcode-cn.com/problems/insert-interval/思路:先遍历一遍找到与新插入区间有交集的区间的起始坐标和终止坐标,然后将他们变成一个区间即可。class Solution {public: vector<vector<int>> insert(vector<vector<int>>& in, vector<int>& ne) { int n = in.s原创 2020-11-28 20:36:46 · 87 阅读 · 0 评论 -
LeetCode 每日一题 140. 单词拆分 II (记忆化搜索)
题链:https://leetcode-cn.com/problems/word-break-ii/思路:记忆化搜索,ans[i],表示以第i个字母开始能组成的数字的集合。每次一个个的试一个单词即可。class Solution {public: int n; unordered_map<int,vector<string> > ans; //unordered_map<string,bool> mp; unordered_set<string原创 2020-11-28 20:32:54 · 151 阅读 · 0 评论 -
LeetCode 每日一题 493. 翻转对 (离散化+树状数组)
题链:https://leetcode-cn.com/problems/reverse-pairs/我的思路:先离散化,然后倒着找,对于每个i,就看一下有多少a[j]<a[i]/2就好。需要注意的是有有可能找到的j是最后一个或2*a[j]==a[i],这两种情况都要减一。#define ll long longconst int N = 5e4+10;int sum[N];int lowbit(int x){ return x&(-x); }int ask(int x){原创 2020-11-28 20:02:25 · 186 阅读 · 0 评论 -
LeetCode 每日一题 452. 用最少数量的箭引爆气球(贪心)
题目链接:https://leetcode-cn.com/problems/minimum-number-of-arrows-to-burst-balloons/我的思路:首先,肯定需要排序,先按区间左边界较小排序;若相等,则按右边界较小排序。贪心策略,要维护一个最大的左边界maxl和最小右边界minr,对于一个气球只有他的左区间必须出现在**[maxl,minr]**这个区间才行,一直更新maxl和minr即可。const int N = 1e4+10;struct node{ int l原创 2020-11-23 15:50:07 · 105 阅读 · 0 评论 -
LeetCode 474. 一和零(二维01背包)
题目链接:https://leetcode-cn.com/problems/ones-and-zeroes/题意:N(0<=N<=600)个仅由“0”和“1”组成的字符串,现在有m(0<=m<=100)个0和n(0<=n<=100)个1。问最可以组成多少个字符串。思路:典型的01背包问题,只不过一个物品占用两类空间,双重循环即可。时间复杂度O(N*m*n)。public: struct node{ int cnt0,cnt1; }a[610]; i原创 2020-10-19 10:58:27 · 122 阅读 · 0 评论