
LeetCode
Pwnpanda
这个作者很懒,什么都没留下…
展开
-
力扣(LeetCode)791. 自定义字符串排序
思路:①先对T进行遍历,记录下T中的元素及个数②然后对S进行遍历,S即为题中定义的字母排序,那么凡是cMap[c] >=1 的,皆为在S和T中同时出现的,那么就留下这些元素,这个顺序刚好就是S的顺序,记得要把cMap[c]的值减掉③因为全是小写字母,所以可以对ASCII码97-122的字符进行遍历,如果这个字符的cMap[c]>=1就说明是存在于T中,却不在S中的,那么这些就额...原创 2019-06-04 18:25:32 · 413 阅读 · 0 评论 -
力扣(LeetCode)921. 使括号有效的最少添加
给定一个由 ‘(’ 和 ‘)’ 括号组成的字符串 S,我们需要添加最少的括号( ‘(’ 或是 ‘)’,可以在任何位置),以使得到的括号字符串有效。从形式上讲,只有满足下面几点之一,括号字符串才是有效的:它是一个空字符串,或者它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者它可以被写作 (A),其中 A 是有效字符串。给定一个括号字符串,返回为使结果字符串...原创 2019-05-17 18:13:58 · 275 阅读 · 0 评论 -
力扣(LeetCode)669. 修剪二叉搜索树
思路:每次先判断根节点是否为空,为空直接返回,否则就判断根节点的值,在范围内就分别对左右子树进行判断,否则,例如根节点值小于L,那么这个结点左边所有的子树都不需要再判断了,因为这是二叉搜索树,根节点左边所有结点的值都小于该根节点的值递归就完事了#include<iostream>#include<cstdlib>using namespace std;ty...原创 2019-05-22 18:19:39 · 394 阅读 · 0 评论 -
力扣(LeetCode)933. 最近的请求次数
写一个 RecentCounter 类来计算最近的请求。它只有一个方法:ping(int t),其中 t 代表以毫秒为单位的某个时间。返回从 3000 毫秒前到现在的 ping 数。任何处于 [t - 3000, t] 时间范围之内的 ping 都将会被计算在内,包括当前(指 t 时刻)的 ping。保证每次对 ping 的调用都使用比之前更大的 t 值。示例:输入:inputs = ...原创 2019-05-17 12:29:23 · 384 阅读 · 0 评论 -
力扣(LeetCode)144. 二叉树的前序遍历
思路:整体和94题类似,借助栈进行操作。前序遍历:根左右具体操作:(假设初始根结点不为空,申请栈空间,这里用Stack数组代替,下标top初始为-1)先把根结点放入Stack中,这样top!=-1,就可以进行while循环了①在第一遍while循环中,先把栈中的元素(根节点)取出来记为p,并打印(或保存),然后判断其右孩子结点是否存在,存在则放入Stack中,随后再检测其左孩子结点是...原创 2019-05-26 15:26:32 · 664 阅读 · 1 评论 -
力扣(LeetCode)1021. 删除最外层的括号
有效括号字符串为空 ("")、"(" + A + “)” 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","()","(())()" 和 “(()(()))” 都是有效的括号字符串。如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。给出一个非空有效字符串...原创 2019-05-17 10:44:15 · 326 阅读 · 0 评论 -
力扣(LeetCode)20. 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)...原创 2019-05-17 10:33:00 · 328 阅读 · 0 评论 -
力扣(LeetCode)234. 回文链表
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?思路:寻找中间结点,然后将后半部分链表倒置,后半部分链表长度是小于或等于原链表的,所以根据后半部分链表来确定对比循环次数#include<iostrea...原创 2019-05-12 20:36:31 · 552 阅读 · 0 评论 -
力扣(LeetCode)94. 二叉树的中序遍历
思路:这次使用非递归法来遍历中序遍历:根左右,①所以在找到最左边的结点之前,我们一直找的是根左根左根左……直到我们找到最左边的子节点(假设其父节点是p)②则这个时候应该一层一层的回找相关的右结点,这个时候就把当前结点转到p->right,继续进行①操作,直到找到最右边的结点具体操作:(假设初始的时候根节点不为空,并申请一个栈Stack,这里用数组来代替,数组下标初始为-1)①...原创 2019-05-25 16:25:12 · 362 阅读 · 0 评论 -
力扣(LeetCode)394. 字符串解码
思路:设置两个栈,一个栈用来存储数字,一个用来存储截取的字符串,然后相乘相加即可坑点:①因为传入的是字符串,所以要考虑数字位数大于一位怎么办,所以仅仅使用num = c - 48,是不行的;②在第三个示例上,最后结尾字符串是ef,前面没有数字,而且没有“[" 、"]”,所以这个算是特殊情况,这个时候ef就保存在str里面,直接添加到result里面就好(编程能力真的菜,思路很容易想,就...原创 2019-05-27 13:06:02 · 727 阅读 · 1 评论 -
力扣(LeetCode)938. 二叉搜索树的范围和
给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。二叉搜索树保证具有唯一的值。示例 1:输入:root = [10,5,15,3,7,null,18], L = 7, R = 15输出:32示例 2:输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10输出:23提示:树中的结点数量最多为 1000...原创 2019-05-18 21:38:42 · 353 阅读 · 0 评论 -
力扣(LeetCode)61. 旋转链表
思路:①先计算出head链表的长度②通过观察,发现题目的意思是从链表的末尾依次取出元素放置链表头部,那么这一定是个循环(参见示例2),所以在k>len的时候可以将k - n*len,那么新的k如果和len相等,那就刚好凑成一个循环,直接返回head即可,否则进入循环,找到第len-k个元素(头节点为1)设为p③temp = p->next,q = p->next,对q进行...原创 2019-06-03 18:42:42 · 391 阅读 · 0 评论 -
力扣(LeetCode)1047. 删除字符串中的所有相邻重复项
思路:用栈来解决,在栈不为空的情况下,逐个取出字符然后和栈顶元素进行比较,如果相同则栈执行pop操作,然后取下一个字符串,如果不相等或者栈为空则执行push操作#include<iostream>#include<string>#include<stack>#include<algorithm>using namespace std;...原创 2019-06-02 21:17:12 · 822 阅读 · 0 评论 -
力扣(LeetCode)946. 验证栈序列
思路:按照顺序,每次从pushed里面取出一个元素,然后放入栈中通过while循环判断在栈不为空的情况下,栈顶元素是否和popped的元素是否相等,相等则该元素出栈,且popped迭代器向指向下一个元素示例1中:1、2、3、4入栈后,栈顶元素是4,popped第一个元素是4,那么popped的迭代器指向后一个5,栈顶元素执行pop操作后变为3,while循环终止,然后5入栈,此时再次进入...原创 2019-06-01 15:57:31 · 607 阅读 · 0 评论 -
力扣(LeetCode)890. 查找和替换模式
思路:代码里用了两个map,m和n,每次取出一个字符串,然后逐位取出字符,在m里面找是否已经存在第i个字符的key值,如果不存在,就添加到map中,如果已经存在则判断它的value值是否和当前pattern[i]的值是否相等,一旦出现不相等,则立刻可以判断这个字符串不符合要求但是如果仅仅使用上述条件是不行的(可以试着把关于n的全部注释掉,你会发现在示例中"abc"也会被判断成立),所以n就...原创 2019-05-31 22:21:17 · 363 阅读 · 0 评论 -
力扣(LeetCode)709. 转换成小写字母
思路:可以直接调用tolower()函数,也可以对其ASCII码进行操作#include<iostream>#include<cstring>#include<cctype>using namespace std;class Solution{public: string toLowerCase(string str) { ...原创 2019-05-24 11:35:33 · 378 阅读 · 0 评论 -
力扣(LeetCode)856. 括号的分数
思路:题目给定字符串,全部是左右括号组成,其实就是乘法分配律例:如果是(),那就是2的0次方,如果是(()),那就是2的1次方,如果是((())),那就是2的2次方,以此类推,如果是示例4那种混合型的,那就要用到乘法分配律了,( () (()) ) == (()) + ((())),把字符串数组全部拆成次方形式,然后计算相加。吐槽一下,做这个题,60%的时间用来理解题目到底啥意思,30%...原创 2019-05-28 15:29:12 · 574 阅读 · 0 评论 -
力扣(LeetCode)22. 括号生成
思路:DFS一波带走,输入n后,那么括号的总数量肯定是2n,所以进行全排列,然后从所有的组合中找出合适的放入vector容器中,这个方法应该算是比较简单的,所以时间复杂度和空间复杂度……唉反思:代码千万条,方法第一条,算法不学好,做题两行泪。#include<iostream>#include<vector>using namespace std;cla...原创 2019-05-30 19:13:29 · 645 阅读 · 0 评论 -
力扣(LeetCode)657. 机器人能否返回原点
#include<iostream>#include<string>using namespace std;class Solution{public: bool judgeCircle(string moves) { int X=0,Y=0; for(auto c:moves) { ...原创 2019-05-25 14:30:11 · 321 阅读 · 0 评论 -
力扣(LeetCode)876. 链表的中间结点
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.v...原创 2019-05-11 22:32:25 · 242 阅读 · 0 评论 -
力扣(LeetCode)965. 单值二叉树
思路:别问,问就是递归#include<iostream>#include<cstdlib>using namespace std;typedef struct TreeNode{ int val; TreeNode *left; TreeNode *right;} TreeNode,*SearchTree,*Position;...原创 2019-05-21 15:57:01 · 233 阅读 · 0 评论 -
力扣(LeetCode)617. 合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:注意: 合并必须从两个树的根节点开始。思路:常规操作,遍历+相加问题:为啥平台都能通过了,但是自己测试一直不对??这年头写代码都得凭感...原创 2019-05-19 20:20:43 · 321 阅读 · 0 评论 -
力扣(LeetCode)1021. 删除最外层的括号
有效括号字符串为空 ("")、"(" + A + “)” 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","()","(())()" 和 “(()(()))” 都是有效的括号字符串。如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。给出一个非空有效字符串...原创 2019-05-05 23:19:36 · 464 阅读 · 0 评论 -
力扣(LeetCode)844. 比较含退格的字符串
给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。示例 1:输入:S = “ab#c”, T = “ad#c”输出:true解释:S 和 T 都会变成 “ac”。示例 2:输入:S = “ab##”, T = “c#d#”输出:true解释:S 和 T 都会变成 “”。示例 3:输入:S = “a##c”, T...原创 2019-05-04 22:02:11 · 237 阅读 · 0 评论 -
力扣(LeetCode)682. 棒球比赛
#include<iostream>#include<vector>#include<numeric>using namespace std;class Solution {public: int calPoints(vector<string>& ops) { vector<int> poin...转载 2019-05-03 21:50:51 · 214 阅读 · 0 评论 -
力扣(LeetCode)232. 用栈实现队列
这道题与225题有异曲同工之妙#include<iostream>#include<stack>using namespace std;class MyQueue{ stack<int> s1,s2;public: void push(int x) { while(!s1.empty()) {...原创 2019-05-02 17:35:19 · 219 阅读 · 0 评论 -
力扣(LeetCode)225. 用队列实现栈
#include<iostream>#include<queue>using namespace std;/**用两个队列模拟栈q2为主要使用队列,q1为辅助队列栈是先进后出,队列是先进先出那么我们可以通过间接的调整元素的输入顺序来达到模拟的目的例如,向栈中依次压入a b c,那么打印出来是c b a那么如果让队列做到相同的功能,我们只需要每次压入元素前...转载 2019-05-02 17:19:01 · 503 阅读 · 0 评论 -
力扣(LeetCode)496. 下一个更大元素 I
给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输...原创 2019-05-06 19:36:27 · 489 阅读 · 0 评论 -
力扣(LeetCode)21. 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:难点在于这是无头节点的链表,所以要首先找出头节点较小的链表标记为Min,另一个标记为Max,这样就对Max进行遍历,如果Max的值大于等于Min当前的值且小于...原创 2019-05-13 22:26:04 · 335 阅读 · 0 评论 -
力扣(LeetCode)226. 翻转二叉树
思路:从首节点开始,如果首节点为空则直接返回,否则交换左右子树,然后递归下一层PS:本来用swap函数就可以解决,不过我还是自己写个Swap,权当练习指针操作,可以使用指针的指针,也可以对取指针的地址,然后再用指针进行交换(对指针操作比较迷的话,就直接用swap函数,干净利落)#include<iostream>#include<cstdlib>using na...原创 2019-05-19 20:50:43 · 377 阅读 · 0 评论 -
力扣(LeetCode)141. 环形链表
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释...原创 2019-05-14 20:42:50 · 374 阅读 · 0 评论 -
力扣(LeetCode)700. 二叉搜索树中的搜索
思路:从根节点开始,如果根节点为空则返回NULL,如果根节点值大于val,那就往左子树上找,否则去右子树上找问号表达式真好用#include<iostream>#include<cstdlib>using namespace std;typedef struct TreeNode{ int val; TreeNode *left; ...原创 2019-05-21 15:45:39 · 312 阅读 · 0 评论 -
力扣(LeetCode)237. 删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入:...原创 2019-05-16 11:22:52 · 391 阅读 · 0 评论 -
力扣(LeetCode)707. 设计链表
设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。...原创 2019-05-16 11:05:35 · 767 阅读 · 0 评论 -
力扣(LeetCode)804. 唯一摩尔斯密码词
思路:通过字符串找出对应的摩斯密码,然后标记一下,本来用map,但是发现有问题,就改用set了#include<iostream>#include<cstring>#include<vector>#include<set>using namespace std;class Solution{public: int un...原创 2019-05-24 12:00:07 · 355 阅读 · 0 评论 -
力扣(LeetCode)160. 相交链表
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如...原创 2019-05-15 18:36:49 · 553 阅读 · 0 评论 -
力扣(LeetCode)104. 二叉树的最大深度
思路:递归一下,如果理解有困难,建议自己动手画一下二叉树,三四个结点即可,方便理解注释掉的代码产生的结果可能是正确的,但是超时了#include<iostream>#include<cstdlib>using namespace std;typedef struct TreeNode{ int val; TreeNode *left; ...原创 2019-05-20 19:26:36 · 293 阅读 · 0 评论 -
力扣(LeetCode)83. 删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3注意:是给定排序链表思路:就是考验对指针的操纵,注释掉的代码是用两个指针(感觉除了比第一种麻烦点没啥优点)#include<iostream>...原创 2019-05-10 15:32:44 · 258 阅读 · 0 评论 -
力扣(LeetCode)203. 移除链表元素
删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5思路:首先要判断的是,头节点会不会就等于val,这个要单独处理,其他的正常处理就行了问题:①为什么不能使用free函数,使用free本地是可以成功的,但是让系统执行就会报错,改成de...原创 2019-05-09 22:38:20 · 868 阅读 · 0 评论 -
力扣(LeetCode)206. 反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?(顺便复习一下不带头节点的链表)思路,申请结点temp用来指向反转后的链表,p用来修改该结点的的next结点,q用来表示p的next结点,用于p在改完...原创 2019-05-08 23:09:34 · 354 阅读 · 0 评论