![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
weixin_42272882
这个作者很懒,什么都没留下…
展开
-
102.二叉树的层序遍历
一、思路:二叉树层序遍历使用队列:一个结点出队时将它的左右孩子放入队列,依次循环打印(循环条件为队列非空);当需要按行打印时,需引入last和nlast两个指针,last指向当前行的最后一个结点,nlast指向下一行的最后一个结点(每次指向新入队的结点,该结点一定是目前下一行的最后一个结点);当last指向的结点出队时,令last=nlast即可。二、代码(c++): ve...原创 2019-06-06 15:08:43 · 125 阅读 · 0 评论 -
刷leetcode-day39
一、题目:921.使括号有效的最少添加:给定一个由 '(' 和 ')' 括号组成的字符串 S,我们需要添加最少的括号( '(' 或是 ')',可以在任何位置),以使得到的括号字符串有效。从形式上讲,只有满足下面几点之一,括号字符串才是有效的:它是一个空字符串,或者 它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者 它可以被写作 (A),其中 A...原创 2018-12-28 11:31:47 · 87 阅读 · 0 评论 -
刷leetcode-day37
一、题目:155.最小栈:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。 pop() -- 删除栈顶的元素。 top() -- 获取栈顶元素。 getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(...原创 2018-12-20 21:42:54 · 86 阅读 · 0 评论 -
刷leetcode-day36
一、题目496.下一个更大的元素给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。示例 1:输入: nums1 = [4,1,...原创 2018-12-06 21:31:07 · 85 阅读 · 0 评论 -
刷leetcode-day34
一、题目:682.棒球比赛你现在是棒球比赛记录员。给定一个字符串列表,每个字符串可以是以下四种类型之一:1.整数(一轮的得分):直接表示您在本轮中获得的积分数。2. "+"(一轮的得分):表示本轮获得的得分是前两轮有效 回合得分的总和。3. "D"(一轮的得分):表示本轮获得的得分是前一轮有效 回合得分的两倍。4. "C"(一个操作,这不是一个回合的分数):表示您获得的最后一个有...原创 2018-12-03 18:00:21 · 111 阅读 · 0 评论 -
刷leetcode-day35
一、题目:844、比较含退格的字符串给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。 示例 1:输入:S = "ab#c", T = "ad#c"输出:true解释:S 和 T 都会变成 “ac”。二、思路:将S和T分别存入一个栈,碰到“#”就执行一次出栈操作;比较两个栈是否相等三、代码(...原创 2018-12-04 18:56:35 · 85 阅读 · 0 评论 -
刷leetcode-day32
一、题目:86.分隔链表给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5二、思路:首先用指针p找...原创 2018-11-16 19:15:05 · 122 阅读 · 0 评论 -
刷leetcode-day33
一、题目:61.旋转链表给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->N原创 2018-11-20 19:09:25 · 87 阅读 · 0 评论 -
19.删除链表中倒数第n个结点
一、题目:19.删除链表中倒数第n个结点给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.二、思路:首先遍历一遍链表,获得链表长度length。再遍历第二次链表,采用cnt计数,当cnt...原创 2018-11-14 20:41:25 · 84 阅读 · 0 评论 -
刷leetcode-day30
一、题目:82.删除排序链表中的重复元素II给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3二、思路:引...原创 2018-11-12 20:32:25 · 182 阅读 · 0 评论 -
刷leetcode-day27
一、题目:929.独特的电子邮件地址每封电子邮件都由一个本地名称和一个域名组成,以 @ 符号分隔。例如,在 alice@leetcode.com中, alice 是本地名称,而 leetcode.com 是域名。除了小写字母,这些电子邮件还可能包含 ',' 或 '+'。如果在电子邮件地址的本地名称部分中的某些字符之间添加句点('.'),则发往那里的邮件将会转发到本地名称中没有点...原创 2018-11-05 17:39:42 · 107 阅读 · 0 评论 -
刷leetcode-day38
一、题目:739.每日温度根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。二、思路:遍历vector,对于每个元...原创 2018-12-24 17:19:05 · 77 阅读 · 0 评论 -
刷leetcode-day40
一、题目:94、二叉树的中序遍历:给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]二、思路:使用二叉树中序遍历的递归算法容易实现。三、代码(C++):class Solution {public: vector<int> inorde...原创 2018-12-30 16:45:56 · 101 阅读 · 1 评论 -
21. 合并两个有序链表
一、思路:采用双指针法,每次比较两个指针指向的结点的大小,将小的放入第三个链表并将指针向后移动一个结点,直到有一个指针为空。最后将非空的指针后面的结点放入第三个链表。二、代码(C++):ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode *l3=new ListNode(0); //新建一...原创 2019-05-22 22:11:46 · 81 阅读 · 0 评论 -
20.有效的括号
一、题目:20.有效的括号给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例1:示例2:示例3:二、思路:思路1:字符串从左向右遍历,若每一个'(', '[', '{' 都有一个中...原创 2018-09-12 18:28:01 · 63 阅读 · 0 评论 -
17.电话号码的字母组合
一、思路:建立一个存放结果的vector<string>res,再建一个临时vector<string>tempres,遍历字符串digits,每次将res里的每个字符串加上新添加的字母放入tempres里,结束后用tempres更新res,直到遍历完字符串digits。二、代码(C++):vector<string> letterCombinat...原创 2019-05-22 16:00:12 · 82 阅读 · 0 评论 -
4.寻找两个有序数组的中位数
一、思路:要求时间复杂度为O(M+N),采用双指针法,将两个有序数组归并到另一个数组里,返回新数组的中位数。二、代码(C++):double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { vector<int> merge; //新数组 i...原创 2019-04-03 19:45:30 · 86 阅读 · 0 评论 -
8.字符串转换整数(atoi)
一、思路:首先找到第一个非空元素,分‘+’‘-’‘数字’三种情况考虑,依次将每一位字符转换成数字即可。二、代码(C++):int myAtoi(string str) { int fir = 0; //记录第一个非空元素位置 int res = 0; //保存结果 int j = 0; for (int i = 0; i != str.size(); i++) ...原创 2019-04-03 19:21:01 · 68 阅读 · 0 评论 -
13. 罗马数字转整数
一、题目描述:13. 罗马数字转整数:罗马数字包含以下七种字符:I,V,X,L,C,D和M。例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做IIII,而是IV。数字 1 在数...原创 2018-09-10 12:06:23 · 115 阅读 · 0 评论 -
11.盛最多水的容器
解法(C++):(1)暴力法:遍历每一种可能 int maxArea(vector<int>& height) { int m=0; //保存最大值 for(int i=0;i!=height.size();i++) //两层循环,遍历每一种情况 { for(int j=i+1;j!=h...原创 2019-04-07 19:54:50 · 64 阅读 · 0 评论 -
7.整数反转
一、思路:通过循环,依次取该整数的最后一个数,再反过来放入另一个整数;要注意在过程中通过INT_MAX,INT_MIN关键字判断有没有越界二、代码(C++): int reverse(int x) { int res=0; while(x) { if(res>INT_MAX/10||res<INT_M...原创 2019-04-01 12:06:19 · 63 阅读 · 0 评论 -
3.无重复字符的最长子串
一、思路:(1)暴力法:遍历所有的字串,统计不含有重复字符的字串的最大长度(2)滑动窗口法:选取(i,j]范围的元素,查看窗口右边的元素,如果元素不在窗口内,j向右移动一个;如果右边的元素在窗口中已经有了重复的值,把i移动到那个重复的值的地方。二、代码(C++):int lengthOfLongestSubstring(string s) { if(s.size()...原创 2019-03-31 16:14:35 · 66 阅读 · 0 评论 -
刷leetcode-day41
一、题目:141.环形链表:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。二、思路:采用快慢指...原创 2019-02-14 13:12:01 · 93 阅读 · 0 评论 -
刷leetcode-day29
一、题目:24.两两交换链表中的结点:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。示例:给定 1->2->3->4你应该返回 2->1->4->3说明:你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。二、思路:采用一个结点f指向两个需要交换的结点的前一个,首先进行删除...原创 2018-11-09 20:32:44 · 72 阅读 · 0 评论 -
2.两数相加
一、题目:2.两数相加:给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807二、...原创 2018-11-06 21:41:23 · 143 阅读 · 0 评论 -
刷leetcode-day13
一、题目:345.反转字符串中的元音字母:编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例1:输入: "hello" 输出: "holle"示例2:输入: "leetcode" 输出: "leotcede"二、思路:将字符串s中的所有元音字母的下标存入一个新的vector a,然后反转vector中的元素为下标对应的s字符串中的字符。三、代码(C+...原创 2018-09-27 21:50:32 · 90 阅读 · 0 评论 -
刷leetcode-day11
一、题目:125.验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例1:输入: "A man, a plan, a canal: Panama" 输出: true示例2:输入: "race a car" 输出: false二、思路:引入一个新的字符串s1,只拷贝s中的字母...原创 2018-09-21 18:08:37 · 75 阅读 · 0 评论 -
刷leetcode-day20
一、题目:557.反转字符串中的单词III:给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例 1:输入: "Let's take LeetCode contest"输出: "s'teL ekat edoCteeL tsetnoc" 注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。二、思路:遍历字...原创 2018-10-11 17:00:57 · 73 阅读 · 0 评论 -
14.最长公共前缀
一、题目:14.最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入: ["flower","flow","flight"]输出: "fl"示例2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。二、思路:从头开始遍历strs[0]中的每个元素,看是...原创 2018-09-26 17:13:49 · 211 阅读 · 0 评论 -
刷leetcode-day10
一、题目:58.最后一个单词的长度:给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。示例1:输入: "Hello World"输出: 5二、思路:从最后向前遍历字符串,找到第一个非空格字符串,从它开始向前遍历直至遇到空格字符串。采用一个变量k...原创 2018-09-20 21:25:11 · 84 阅读 · 0 评论 -
刷leetcode-day9
一、题目:38.报数:报数序列是指一个整照其中的整数的顺序进数序列,按行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 "one 1" ("一个一") , 即 11。11 被读作 "two 1s" ("两个一"), 即 21。21 被读作 "one 2", "one 1.原创 2018-09-19 20:40:40 · 96 阅读 · 0 评论 -
刷leetcode-day4
一、题目:520.检测大写字母给定一个单词,你需要判断单词的大写使用是否正确。我们定义,在以下情况时,单词的大写用法是正确的:全部字母都是大写,比如"USA"。 单词中所有字母都不是大写,比如"leetcode"。 如果单词不只含有一个字母,只有首字母大写, 比如 "Google"。否则,我们定义这个单词没有正确使用大写字母。示例 1:示例2:二、思路:...原创 2018-09-14 16:11:02 · 132 阅读 · 0 评论 -
刷leetcode-day8
一、题目:28. 实现strStr()函数给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例1:示例2:二、思路:遍历haystack字符串,看是否存在needle[0]这个字符,若存在,再检测之后的needle.size()-1个字符...原创 2018-09-18 19:56:08 · 70 阅读 · 0 评论 -
刷leetcode-day7
一、题目:344.反转字符串编写一个函数,其作用是将输入的字符串反转过来。示例1:示例2:二、思路:将字符串反转存入一个新字符串三、代码(C++):string reverseString(string s) { string s1=""; for(int i=s.size()-1;i>=0;i--) ...原创 2018-09-17 23:01:30 · 70 阅读 · 0 评论 -
刷leetcode-day6
一、题目:67.二进制求和给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例1:示例2:二、思路:先将两个字符串反过来,每位依次相加得到字符串c;再对c每一位进行判断,如果为'2',则c[i]-2,c[i+1]+1;最后返回c三、代码(C++):string addBinary(string a, stri...原创 2018-09-16 19:16:54 · 78 阅读 · 0 评论 -
刷leetcode-day21
一、题目:657.机器人能否返回原点:在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。移动顺序由字符串表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R(右),L(左),U(上)和 D(下)。如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false。注意:机器人...原创 2018-10-12 20:55:08 · 62 阅读 · 0 评论 -
刷leetcode-day14
一、题目:383.赎金信:给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回 true ;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。)注意:你可以假设两个字符串均只含有小写字母。ca...原创 2018-09-28 17:15:09 · 138 阅读 · 0 评论 -
刷leetcode-day23
一、题目:83.删除排序链表中的重复元素:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3二、思路:引入两个指针p=head,q=head->next。采用一个while...原创 2018-10-24 19:28:54 · 92 阅读 · 0 评论 -
刷leetcode-day26
一、题目:203.移除链表元素删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5二、思路:引入一前一后两个指针p,q,查找q->val是否为val,是则删除q指向的结点。不是则p,q向后移动继续查找三、代码...原创 2018-10-29 14:16:20 · 94 阅读 · 0 评论 -
刷leetcode-day25
一、题目:206.反转链表:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL二、思路:反转链表结点的值,从第一个结点向后遍历,依次交换前后两个结点的值,把第一个结点的值放到最后;然后再从第一个结点向后依次交换,把第一个结点的值放在倒数第二个结点位...原创 2018-10-25 21:18:07 · 76 阅读 · 0 评论