
LeetCode
Wade_Gao
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode-18:四数之和
一、题目描述二、解题思路三数之和会了,这道题就会了。还是先排序,做去重复的初步准备其实也就是三数之和外层再套一个遍历而已但是不能直接就在nums[i]>targetnums[i]>targetnums[i]>target就返回,因为这个targettargettarget是人家任意指定的,有可能比数组里最小的还小,三数之和里人家指定了就是000,这块有点不同,否则会被卡用例:三、解题代码class Solution {public: vector<vec原创 2020-10-13 23:12:28 · 261 阅读 · 0 评论 -
LeetCode-15:三数之和
一、题目描述二、解题思路首先,题目要求不能包含重复的三元组,所以要想到通过排序选择三元组的方法来去重;对排序数据进行遍历如果nums[a]>0nums[a] > 0nums[a]>0,后面的元素都比nums[a]nums[a]nums[a]大,不可能三数之和为000,直接返回重复元素跳过,避免重复左指针L=a+1L=a+1L=a+1,右指针R=size−1R = size - 1R=size−1:相当于固定一个元素,去凑另两个若和大于000:说明太大了,右指针左移若和原创 2020-10-13 22:39:51 · 216 阅读 · 0 评论 -
Leetcode-429:N叉树的层序遍历
题目描述解题思路这个就是标准的BFSBFSBFS解决步骤,注意返回结果的每一个子向量,都是一层上的元素,不同的向量里的元素所在的层次不同。解题代码class Solution {public: vector<vector<int>> levelOrder(Node* root) { vector<vector<int>> ret; if(!root) return ret; ret.pus原创 2020-09-30 11:19:31 · 299 阅读 · 1 评论 -
LeetCode-224: 基本计算器
一、题目描述二、解题思路将中缀表达式转换为后缀表达式。三、解题代码class Solution{private: static unordered_map<char, int> icp, isp; stack<char> stk; string src; string sln; void Back(); int calc(int tmp1, char oper, int tmp2);public: int ca原创 2020-07-07 19:30:16 · 201 阅读 · 0 评论 -
LeetCode-1018:可被 5 整除的二进制前缀
class Solution {public: vector<bool> prefixesDivBy5(vector<int>& A) { vector<bool> sln; unsigned int dp_2 = 0, dp_1 = 0; for(size_t i = 0; i < A.size(); i++){ dp_1 = dp_2 * 2 + A.at(i);原创 2020-06-17 22:27:13 · 155 阅读 · 0 评论 -
LeetCode-560: 和为K的子数组
First. Problem’s DescriptionSecond. Problem’s SolutionUse a HashTable to store the pre_sum of the array, use unordered_map<sum, how_many> ump;When we start, insert pair<int, int>(0, 1)into the unordered_map first, that represents even if t原创 2020-06-07 17:02:19 · 157 阅读 · 0 评论 -
LeetCode-1:两数之和
一、题目描述二、解题思路这道题当然可以暴力,这样时间复杂度为O(n2)O(n^2)O(n2)。所以我采用哈希表来解决。遍历一次数组,将其与下标的pair(val,index)pair(val, index)pair(val,index)插入到哈希表中。所以我们根据当前的数字去找target−nums[i]target - nums[i]target−nums[i]是否在哈希表里即可。但是如果出现target−nums[i]==nums[i]target - nums[i] == nums[i]tar原创 2020-06-04 20:02:17 · 166 阅读 · 0 评论 -
LeetCode-287:寻找重复数
一、题目描述二、解题思路这是剑指Offer的原题。。。。。。评论区用的都是有环链表的方法一个萝呗一个坑儿,如果没有重复那么下标与元素值应该可以达成一一对应那么如果当前下标和元素值不同,那么我们就不断地调整,也就是说把这个元素调到它应该在的位置如果发现了它要去的那个地方被一个和它相等的元素占了,那就直接返回over时间复杂度O(n),空间复杂度S(1)三、解题代码class Solution {public: int findDuplicate(vector<int&g原创 2020-05-26 22:14:58 · 144 阅读 · 0 评论 -
LeetCode-4:寻找两个正序数组的中位数
一、题目描述二、解题思路 题目要求时间复杂度为O(log(m+n))O(log(m + n))O(log(m+n)),很明显需要采用二分法来解决。 如果我们可以在这两个有序序列中找到第KKK个数字,那么我们只要能找到中间的一个或两个数字,就一定可以得到这道题的解。 所以问题退化为寻找两个有序序列的按序第KKK个数字。 在寻找中间的数字的过程中,需要区分以下两个序列长度和为奇数偶数的区别:如果为奇数,那么中间的数字只有一个,那就是第(len1+len2+1)/2(len1 + len原创 2020-05-24 23:54:48 · 438 阅读 · 0 评论 -
LeetCode-696:计数二进制子串
一、题目描述二、解题思路找每次连续的1或者0的个数,存入vector,之后每次选取紧邻着的两个中较小的那个相加给res比如:100011111001110,得到vector = {1, 3, 5, 2, 3, 1},所以res = 1 + 3 + 2 + 2 + 1三、解题代码class Solution {public: int countBinarySubstrings(string s) { int l = 0, r = 0; int a[2];原创 2020-05-21 00:31:05 · 189 阅读 · 0 评论 -
LeetCode-432:全 O(1) 的数据结构
一、题目描述二、解题思路三、解题代码class AllOne{private: class Node { public: string str; int num; Node(string s, int n) { str = s; num = n; } friend bool operator<(const Node &原创 2020-05-20 23:59:23 · 585 阅读 · 0 评论 -
LeetCode-355:设计推特
class Twitter{private: vector<pair<int, int>> Msg; unordered_map<int, set<int>> Fler;public: Twitter() { } void postTweet(int userId, int tweetId) { Msg.push_back(make_pair(userId, tweetId));原创 2020-05-17 22:36:32 · 157 阅读 · 0 评论 -
LeetCode-25:K 个一组翻转链表
一、题目描述二、解题思路 这道题,最简单的方法就是从头节点开始,每次查看当前剩下的节点是不是多于K个,如果是的话就进行反转,否则就不进行并返回。 这样当然可以,但是有性能瓶颈:每次都需要查看剩余元素个数,相当于遍历了两次链表才可以完成反转,还不考虑反转的操作占用时间。 我想出来的办法是每次都进行反转,不考虑最后的不足K个的那段不需要反转的问题。那么就势必要解决最后这一点零头的问题。 通过前后指针,记录下当前被反转段的头节点和尾节点,反正都是要用循环的,顺手就可以判断是不是少于K个。如果少原创 2020-05-16 01:29:39 · 228 阅读 · 0 评论 -
LeetCode-1048:最长字符串链
一、题目描述二、解题思路这个提示很重要,它限定了字符串的最大长度题目里并没有说字符串的长度是递增的,有可能是乱序长度排列的,而我的一次错误提交也证实了这一猜想。那么首先我们应该将字符串按照长度进行聚类,注意这里会用到1 <= words[i].length <= 16这个条件。可以建立起vector<vector<int>> LenDic(17)然后,此题是动态规划类型的题目,那么如何进行动态规划呢?确定dp数组,明确数组值的含义dp[i]表示以wor原创 2020-05-16 00:07:01 · 241 阅读 · 0 评论 -
详解堆排序
#include #include #include #include using namespace std;template void AdjustDown(T A[], int k, int len){auto i = 2 * k + 1;while (i <= len){if (i < len && A[i] > A[i + 1])i++;if (A[k] > A[i]){swap(A[k], A[i]);k = i;i =原创 2020-05-14 13:19:33 · 365 阅读 · 0 评论 -
LeetCode-297: 二叉树的序列化与反序列化
class Codec{public: // Encodes a tree to a single string. string serialize(TreeNode *root) { if (!root) return ""; vector<TreeNode *> vec; string ret = "["; queue<TreeNode *> que; .原创 2020-05-14 11:26:03 · 209 阅读 · 0 评论 -
LeetCode-173: 二叉搜索树迭代器
First. Problem’s DescriptionSecond. Problem’s SolutionBST has a non-decreasing inorder-traversing series. We can use a list to store the nodes and where we call next(), we delete the beginning node in the list.Three. Code For Solutionclass BSTIterator原创 2020-05-12 22:16:33 · 229 阅读 · 0 评论 -
LeetCode面试题 03.01: 三合一
First. Problem’s DescriptionSecond. Problem’s SolutionI don’t think there is any point that’s difficult to solve.Three. Code For Solutionclass TripleInOne {private: int *Data; int sSize = -1; unsigned int s_begin[3]; unsigned int s_cu原创 2020-05-12 21:36:21 · 293 阅读 · 0 评论 -
LeetCode面试题 16.02: 单词频率
First. Problem’s DescriptionSecond. Problem’s SolutionWe can simply use a unordered_map to solve this problem, which core is powered by HashBy the way, the default initial value is 000Three. Code For Solutionclass WordsFrequency {private: unorde原创 2020-05-12 21:05:00 · 245 阅读 · 0 评论 -
LeetCode-146:LRU缓存机制
一、题目描述class LRUCache{private: unordered_map<int, list<pair<int, int>>::iterator> ump; list<pair<int, int>> Lst; int MaxSize; int HowMuch;public: LRUCache(int capacity) { HowMuch = 0;原创 2020-05-12 16:21:32 · 259 阅读 · 0 评论 -
LeetCode-184:部门工资最高的员工
SELECT d.Name as Department, e.Name as Employee, e.SalaryFROM Employee e, Department dWHERE e.DepartmentID = d.Id AND(e.Salary, e.DepartmentID) IN (SELECT MAX(SALARY), DepartmentID FROM Employee group by DepartmentID);原创 2020-05-09 00:40:37 · 144 阅读 · 0 评论 -
LeetCode-648:单词替换
一、题目描述二、解题思路用双指针法切割字符串,得到每一个单词,然后开始遍历字典首先判断单词首字母和字典当前元素的首字母是否相等,相等继续进行下一步,否则肯定不是判断当前单词的前缀是否等于字典当前元素如果以上两个条件都满足,就把单词替换成词根,注意这个动作完成后不能直接break因为有可能存在继承词有许多可以形成词根的情况,我们需要找到最短的,比如:["catt","cat","bat...原创 2020-05-07 16:03:50 · 418 阅读 · 0 评论 -
LeetCode-面试题01.04:回文排列
一、题目描述二、解题思路就是用一个Hash表存储字符串中出现过的字符,待字符串遍历完成后,再遍历一遍Hash表,如果出现次数为奇数的字母超过1个,就不可能重组为回文串,否则就可以重组为回文串。三、解题代码class Solution {public: bool canPermutePalindrome(string s) { vector<int> ...原创 2020-05-07 15:43:31 · 202 阅读 · 0 评论 -
LeetCode-572:另一个树的子树
一、题目描述二、解题思路采用递归来解决:如果一个树是另一个树的子树,那么:主树和子树为同一棵树子树是主树的左子树的子树子树是主树的右子树的子树那么我们可以得到如下代码:class Solution {private: bool isSametree(TreeNode* s, TreeNode* t) { if(!s && !t) retu...原创 2020-05-07 01:48:08 · 197 阅读 · 0 评论 -
LeetCode-606:根据二叉树创建字符串
一、题目描述二、解题思路递归进行,首先加入当前传入的头节点,然后如果左子树不空,sln加上被括号包围的左子树返回结果,否则sln加上一对空括号;如果右子树不空,sln加上被括号包围的右子树返回结果。to_string(T val):将数值转化为字符串。返回对应的字符串。函数原型string to_string (int val);string to_string (long v...原创 2020-05-02 16:27:56 · 173 阅读 · 0 评论 -
LeetCode-3:无重复字符的最长子串
一、题目描述二、解题思路采用一个Hash表,记录出现的频次,再采用一个last数组,当检查到某一位字母重复出现时,记录该字母上次出现的地方。之所以要保存上次出现的位置,看下面的例子:"AKVFWCEMCNBguywesgfceuyr3275468372trgcoiwgyagaoeufcageoGIC"我们第一次查重,会找到第八位C在之前出现过,那么我们需要将l右移,但是不能直接移动到r处...原创 2020-05-02 15:45:40 · 140 阅读 · 0 评论 -
LeetCode-609: 在系统中查找重复文件
First: Problem’s DescriptionSecond: Problem’s SolutionWe can useclass Solution {private: pair<string, string> CreateDocPair(string str, string rootPath){ int prior = 0; ...原创 2020-05-02 00:47:31 · 185 阅读 · 0 评论 -
LeetCode-1160: 拼写单词
First: Problem’s DescriptionSecond: Problem’s SolutionEvidently we can use a hash vector to save the frequency of the letters in chars. then we traverse the vector wordsand each time we traverse a ...原创 2020-05-01 22:37:58 · 156 阅读 · 0 评论 -
LeetCode-面试题 04.05: 合法二叉搜索树
First: Problem’s DescriptionSecond: Problem’s SolutionThe sequence created when traversing the BST by the method of inorder is a non decreasing sequence. And if the BST is empty, we should return t...原创 2020-04-30 17:51:40 · 221 阅读 · 0 评论 -
LeetCode-36有效的数独
First. Problem’s DescriptionSecond. Problem’s SolutionI think that he only important thing is how to judge if the each of the nine sublocks containing 9 numbers derived from the given Sudoku comply...原创 2020-04-30 17:20:22 · 122 阅读 · 0 评论 -
LeetCode-202:快乐数
一、题目描述二、解题思路在计算的过程中,只要当前得到的数字在之前出现过,就说明一定不快乐,直接返回false就好了这里可以用一个set来记录之前的数字是否出现过set.find(x):找到了返回迭代器位置,否则返回set.end()三、解题代码class Solution {public: bool isHappy(int n) { set<int&g...原创 2020-04-30 01:05:22 · 146 阅读 · 0 评论 -
LeetCode-264:丑数 II
一、题目描述二、解题思路采用三指针法丑数是因数只有2, 3, 5的数字,设置一个dp数组表示当前已经找到的有序丑数。那么这个序列分别乘以2, 3, 5之后得到的序列肯定还是丑数序列首先第一个数字肯定是1,第二个也不难推出是2但是怎么确定先后顺序:1得到2, 3, 5,2得到4, 6, 10。如果直接接在后面,可以看到不成顺序,违背了dp是已经找到的有序丑数这一设定,导致后面的工作无法进...原创 2020-04-29 23:03:27 · 210 阅读 · 0 评论 -
LeetCode-面试题 03.04:化栈为队
class MyQueue {private: stack<int> s1, s2;public: /** Initialize your data structure here. */ MyQueue() { } /** Push element x to the back of queue. */ void push(i...原创 2020-04-29 22:02:29 · 222 阅读 · 0 评论 -
LeetCode-33:搜索旋转排序数组
一、题目描述二、解题思路要求在O(logn)O(logn)O(logn)的时间复杂度内确定序列里是否存在这个数字,只能采用二分法从旋转的方式可以看出,是把较大的那一半放到前面来了,从而导致原序列区间有序,我们可以确定这个区间的分割点,然后在两个区间内二分查找。但是这样有个问题,二分查找需要保证原序列递增有序,那我们怎么判断传入的区间序列是否为区间有序?答案是比较区间首尾元素大小关系,如果...原创 2020-04-27 23:40:20 · 166 阅读 · 0 评论 -
LeetCode-357:计算各个位数不同的数字个数
一、题目描述二、解题思路首先,定义一个数组dp并指明含义:dp[i]的值表示当数字最大为i位数时应该返回的结果,比如dp[2] = 91其次,找出关系数组元素之间的迭代关系式举个例子,要确定形如1234这样的四位数的答案,得到答案的过程又分出来两种情况形如1234的四位数从形如123这样的三位数在最低位随便加上一位不重复的数字构成,即从典型三位数(是形如123而不是012的情况)...原创 2020-04-27 22:22:38 · 243 阅读 · 0 评论 -
剑指Offer-68:二叉树的最近公共祖先
一、题目描述二、解题思路这是剑指Offer的最后一道题,本质是二叉树的后序遍历(非递归)。牢牢记住二叉树的后序遍历以非递归形式遍历到某一节点时,辅助栈内保存的元素即为根节点到该节点的路径。知道了上面的性质后,我们就可以利用这两个性质来做题创建三个栈:遍历栈s,保存pp的路径的栈sp和保存qq的路径的栈sq遍历到当前节点时,调用拷贝构造函数,把遍历栈s拷贝给sp或sq当两个待查找节点...原创 2020-04-25 02:23:57 · 175 阅读 · 0 评论 -
剑指Offer-04:二维数组中的查找(FindInPartiallySortedMatrix)
一、题目描述二、解题思路可以通过四个顶点,将矩阵分为四个区域左上角:只有比左上角的元素大的,如果从左上角出发,则找不到比较的反馈左下角:右面的同行元素都比它大,上面同列元素都比它小,可以界定寻找路径右上角:同左下角右下角:同左上角三、解题代码LeetCode解题代码class Solution {public: bool findNumberIn2DArray(v...原创 2020-04-24 10:39:38 · 277 阅读 · 0 评论 -
剑指Offer-15:二进制中1的个数(NumberOf1InBinary)
一、题目描述二、解题思路解法1:逐步查看该数字的最低位,看是否为111,然后把数字左移111位。时间复杂度为O(32n)O(32n)O(32n)解法2:将数字不断与(n−1)(n-1)(n−1)相与,每次计算完成后,只要数字不为000,就说明存在111个111三、解题代码解法1class Solution {public: int hammingWeight(uint3...原创 2020-04-23 01:51:47 · 178 阅读 · 0 评论 -
剑指Offer-03:数组中重复的数字03_01_DuplicationInArray
一、题目描述二、解题思路既然所有数字都在[0,n−1)[0, n-1)[0,n−1)范围内,那么一个下标一定对应着一个值,且该值与下标最终一定相等,一个萝呗占一个坑。如果比较过程中,下标和值不等,那么就交换理论上与值唯一匹配的那个下标的值(a[a[i]]a[a[i]]a[a[i]])和当前的值(a[i]a[i]a[i]),不停地交换,直到它们相等。如果在这一过程中(下标和值此时仍然不匹...原创 2020-04-23 00:39:53 · 211 阅读 · 0 评论 -
LeetCode-337:打家劫舍 III
一、题目描述二、解题思路错误思路:刚开始我以为只要隔层相加取最大就行了,但是不是这么回事,因为[1, 2, null, 2, 5]应该返回1 + 5 = 6,隔层只相加一部分是完全有可能的正确思路假设从root节点开始如果抢劫了root节点,那么一定不可能抢劫root->left和root->right,只能是抢劫完root之后继续抢劫root->left和ro...原创 2020-04-21 13:36:16 · 147 阅读 · 0 评论