打卡刷题
Vieta's_Jumping
一知半解即是一无所知,SJTU直博在读
展开
-
回溯法集锦(26)
https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/submissions/实际上就是全排列。不过变成了不定长的数据。class Solution {public: string str[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; vector<string> ans; string temp_a原创 2021-06-21 00:23:47 · 89 阅读 · 0 评论 -
打卡(25)贪心集锦
https://leetcode-cn.com/problems/jump-game/简单贪心计算当前能到达的最大距离,计算所有满足小于等于最大距离点,是否可以更新最大距离,以此类推到最后一个元素class Solution {public: bool canJump(vector<int>& nums) { int n=nums.size(); int most=1; for(int i=1;i<=n;i++){原创 2021-06-06 09:09:29 · 108 阅读 · 2 评论 -
打卡(24)[好板子]
https://leetcode-cn.com/problems/intersection-of-two-linked-lists/相交链表class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { if (headA == nullptr || headB == nullptr) { return nullptr; }原创 2021-06-06 00:36:04 · 63 阅读 · 0 评论 -
打卡(23)extra
https://leetcode-cn.com/problems/paint-house-iii/这个动态规划,没太想明白,是怎么能想出来这样动态规划的class Solution {public: const int INF = 0x3f3f3f3f; int f[105][25][105]; int minCost(vector<int>& houses, vector<vector<int>>& cost, int m原创 2021-06-03 22:10:39 · 70 阅读 · 0 评论 -
打卡(23)
今天看过去的题目的时候,发现了一些有趣的小细节。https://leetcode-cn.com/problems/power-of-two/判断是不是2的幂次方,只需要判断是不是10000……0的形式的二进制数就可以了。那么可以简单判断为:class Solution {public: bool isPowerOfTwo(int n) { return (n>0)&&((n-1)&n)==0; }};还是要注意,位运算是低于“==原创 2021-06-03 20:29:03 · 46 阅读 · 0 评论 -
打卡(22)不你不能
https://leetcode-cn.com/problems/can-you-eat-your-favorite-candy-on-your-favorite-day/前缀和的简单使用,但是为什么我整了那么久都没发现,自己没i++,我吐了啊,以后还是尽可能用for(;;i++),或者for(auto num:nums)这样的话,反正不会再犯这样的错误了吧,哭。必定有一部分时间是用来痛苦的嘛。。class Solution {public: using ll=long long; v原创 2021-06-02 16:51:35 · 52 阅读 · 0 评论 -
打卡(21)
https://leetcode-cn.com/problems/find-majority-element-lcci/今天晚上本来想看看分支策略,结果看到了一个Boyer-Moore 算法,虽然查了一下,觉得还不算是什么想象中的那个算法,好像是个字符串匹配算法。主要思想就是,相消策略,如果我的数目多的话,就像打仗一样,每次都一换一就算了,反正最后肯定还是我剩下的人多。so,模拟这个过程,就可以。但是这个题目有一个问题在于,可能会出现[1,2,3]这种情况,这样运行下去,会造成选择3,但是结果错误。万原创 2021-05-31 00:06:50 · 55 阅读 · 0 评论 -
打卡(20)
https://leetcode-cn.com/problems/strange-printer/submissions/最近似乎是动态规划特辑。想到了一个是首尾相同的时候,直接相等,没想到的是不相等的时候要穷举,这样看下来的话,时间复杂度大概是n!级别?抄一下代码,如下:动态规划思想确定了之后,代码书写竟然一时成为了难题。class Solution {public: int strangePrinter(string s) { int n = s.length();原创 2021-05-24 23:48:23 · 50 阅读 · 0 评论 -
打卡(19)
https://leetcode-cn.com/problems/uncrossed-lines/感觉还是挺有意思的啊,动态规划的题目都是这样。有个dalao说的很透彻,这就是最长公共子序列长度嘛。关于动态规划,多说几句废话的话,一般都是从1开始对i和j进行增加。(PS:表示我意识到这一点了。)class Solution{public: int maxUncrossedLines(vector<int>& nums1,vector<int>& nu原创 2021-05-23 23:29:55 · 46 阅读 · 0 评论 -
打卡(18)
https://leetcode-cn.com/problems/longest-common-subsequence/submissions/class Solution {public: int longestCommonSubsequence(string text1, string text2) { const int M=text1.size(); const int N=text2.size(); vector<vector<原创 2021-04-04 12:32:30 · 57 阅读 · 0 评论 -
打卡(17)
https://leetcode-cn.com/problems/set-matrix-zeroes/submissions/这个题目的话,如果看见0就把某个位置变成0,可能输出错误答案。因为你对于数字的替换应当是simultaneously,即是同时替换,否则数字将会相互影响。而人工智能的梯度下降算法,也有一个要求就是simultaneously。所以,应当将状态记录下来。而对于某个位置的数字,他更新的状态是整个行或者列的状态。之所以将原本用于标识状态的O(m*n)的空间变成row(m),col(原创 2021-03-21 17:07:28 · 65 阅读 · 0 评论 -
打卡(16)+一点点(NULL)蓝桥杯
https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/submissions/虽然逆波兰表达式也不是第一次见到了,但是,还是错在了运算顺序上面。栈对数据的压入,使得数据的顺序发生了颠倒。所以,对于不满足交换律的运算,就会出错。这个错误明显是自己曾经犯过的,没想到还是不长记性,或者就是本身对于栈的理解没有那么深刻。class Solution {public: int cal(int a,int b,string&am原创 2021-03-20 22:45:11 · 67 阅读 · 0 评论 -
打卡(15)
https://leetcode-cn.com/problems/reverse-linked-list-ii/submissions/这个题目还挺简单,可能只需要注意几个小小问题。头指针当然是一直指向头的,但是这个头,如果在之后进行了交换那么,他就不再是头指针,为了确保头指针的准确性,应当引入一个头前缀指针pre来表示头的前缀。使得最后返回pre->next是绝对正确的。而我似乎对于头指针有着奇怪的执念,逻辑错误让错误沉入水下。class Solution {public: Lis原创 2021-03-18 20:28:31 · 72 阅读 · 1 评论 -
打卡(14)
数据结构课上是用逆波兰式写的,然后这个题目由于只要+ -两运算,则可以进行简化。这个题还有点无聊的加上了空字符,如果上来就觉得不好写的话,其实也是自己没有记牢数据结构的知识吧。这个还是读懂的别人的代码,用到了编译原理词法分析。目前还没学,不过看起来他的逻辑是从上到下的,而似乎不是平常的那种思考方式。(建议默写。class Solution {public: long long calculate(string s) { idx = 0,len= s.size();//初原创 2021-03-14 23:07:50 · 88 阅读 · 0 评论 -
打卡(13)
class Solution {public: string removeDuplicates(string S){//怎么去使用已有的知识真是一个有困难且有意思的事情 string stk; int n=S.size(); for(int i=0;i<n;i++){ if(!stk.empty()&&stk.back()==S[i]){ stk.pop_back();原创 2021-03-09 11:07:07 · 82 阅读 · 0 评论 -
打卡(12)
class Solution {private: vector<vector<int>> f;//类似于KMP的失败函数 int n;//n代表的是一个n的值 int ans_num; int anstemp=0;public: void dfs(const string& s, int i){ if(i==n){ if(ans_num>anstemp&&anstemp!原创 2021-03-08 23:32:40 · 85 阅读 · 0 评论 -
打卡(11)
https://leetcode-cn.com/problems/palindrome-partitioning/class Solution {private: vector<vector<int>> f;//类似于KMP的失败函数 vector<vector<string>> ret;//返回的答案 vector<string> ans;//部分答案 int n;//n代表的是一个n的值public:原创 2021-03-07 22:26:53 · 78 阅读 · 0 评论 -
打卡(10)
https://leetcode-cn.com/problems/next-greater-element-ii/自己写的就是真的太慢了,速度才超过5%,==不过全都是自己写的,就比较有成就感。就是有很多可以剪枝的地方吧,大概。当你确定了前面一个元素他的更大元素在某个位置,那么根据数量关系当前要寻找的元素的更大元素的范围,是可以缩小的,感觉我的代码可能有一些赘余的操作吧,所以就很慢。但是我的空间复杂度是真的小。(得意!都写在了代码里面。class Solution {public: v原创 2021-03-06 11:23:02 · 58 阅读 · 0 评论 -
打卡(9)
能做的就是体会一下这个类的写法吧,反正其实也没什么用处。用两个栈来实现一个队列。class MyQueue {private: stack<int> inStack, outStack; void in2out() { while (!inStack.empty()) { outStack.push(inStack.top()); inStack.pop(); } }public:原创 2021-03-05 18:44:58 · 48 阅读 · 0 评论 -
打卡(8)关于位运算
https://leetcode-cn.com/problems/counting-bits/solution/将最后一个1设置为0:证明他还是很简单的,假设一串数据为:x=……1……,1的前面不知道,1的后面都是0,x-1的结果是:x-1=……0……,0的位置与上述1的位置相同,0的前面与上述相同,0的后面都是1,那么进行位运算的时候,你显然可以发现,最终的结果就是x中1前面的数字都不变化,1后面的数字都会变成0(包括1。以及,位运算的时候,下面这一点:i&(i-1)==0实际上是原创 2021-03-03 12:50:55 · 48 阅读 · 0 评论 -
打卡(7)
气死我了,又一次没保存?https://leetcode-cn.com/problems/range-sum-query-2d-immutable/class NumMatrix {public: vector<vector<int>> sum; NumMatrix(vector<vector<int>>& matrix) { int n=matrix.size(); if(n>0){//因为原创 2021-03-02 11:06:45 · 56 阅读 · 0 评论 -
打卡(6)
https://leetcode-cn.com/problems/range-sum-query-immutable/submissions/一个简简单单的前缀和,不过写成了类的形式而已class NumArray{public: vector<int> sums; NumArray(vector<int> nums){ int n=nums.size(); sums.resize(n+1); for(int i=原创 2021-03-01 10:46:28 · 60 阅读 · 0 评论 -
打卡(5)
托普利茨矩阵leetcode:https://leetcode-cn.com/problems/toeplitz-matrix/还是挺简单的一道题目,但是感觉总是不如题解那么巧妙:题解表示,只需要比较此元素和它左上角的元素是否相等即可,即是利用了相等的传递性。我的代码:class Solution {public: bool isToeplitzMatrix(vector<vector<int>>& matrix) { int n=m.原创 2021-02-27 00:00:26 · 54 阅读 · 0 评论 -
一场风波过后,我就接着好好学习吧打卡(4)
简单到爆栈的矩阵转置:class Solution {public: vector<vector<int>> transpose(vector<vector<int>>& matrix) { int n=matrix[0].size(); int m=matrix.size(); vector<vector<int>> res(n,vector<int>(m原创 2021-02-26 00:41:24 · 67 阅读 · 0 评论 -
打卡(3)
https://leetcode-cn.com/problems/max-consecutive-ones-iii/这次虽然是一个中等题目,但是我自己写了出来。(竟然对自己的能力这么不自信吗!所以,看到题目,老是感觉不知道如何转化为自己已经学过的知识,这是在哪个方面有欠缺呢?题目,最大连续的1的个数,其中可以将固定数量的部分的0替换为1,只需枚举右区间的端点的大小,然后左边区间,按照要求,若0的数量已经超过某个数值,则向右滑动,本题实际上是滑动窗口问题。代码:class Solution {pu原创 2021-02-20 13:31:36 · 50 阅读 · 0 评论 -
(2)感觉今天没有学到什么,板子
//所谓的原地算法,其实就是修改数据,将数据成倍修改,跟状态数组的原理不就是一样的么。。class Solution {public: vector<int> findDisappearedNumbers(vector<int>& nums) { int n = nums.size(); for (auto& num : nums) { int x = (num - 1) % n;原创 2021-02-17 22:43:04 · 53 阅读 · 0 评论 -
LeetCode打卡(1)
今天又开始的新一轮的打卡,就从简单题目开始吧。数组拆分 Ihttps://leetcode-cn.com/problems/array-partition-i/submissions/是一个很有意思的贪心题目,难度很小。但是证明他的过程可以使用动态规划的方法进行。但是这次的动态规划,我们从最复杂的情况向着最简单的情况进行思考。假设这是一个排好序列的2n个元素个数的数组,我们考虑每次可以获得的最大的数字,必定是小于等于排好序的元素的次大数字。采用贪心策略,则取得这个可能的最大数字。接着,将序列的最原创 2021-02-16 12:31:59 · 61 阅读 · 0 评论