leetcode
lysSuper
这个作者很懒,什么都没留下…
展开
-
面试题 08.06. 汉诺塔问题
在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上。请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。你需要原地修改栈。示例1: 输入:A = [2, 1, 0], B = [], C = [] 输出:C = [2,原创 2020-06-12 18:32:25 · 280 阅读 · 0 评论 -
面试题 03.04. 化栈为队
实现一个MyQueue类,该类用两个栈来实现一个队列。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); // 返回 false说明:你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size 和 is empty...原创 2020-06-08 20:49:36 · 194 阅读 · 0 评论 -
面试题 01.07. 旋转矩阵
给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3]]示例 2:给定 matrix =[ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6.原创 2020-06-08 20:19:49 · 196 阅读 · 0 评论 -
535. TinyURL 的加密与解密
TinyURL是一种URL简化服务, 比如:当你输入一个URLhttps://leetcode.com/problems/design-tinyurl时,它将返回一个简化的URLhttp://tinyurl.com/4e9iAk.要求:设计一个 TinyURL 的加密encode和解密decode的方法。你的加密和解密算法如何设计和运作是没有限制的,你只需要保证一个URL可以被加密成一个TinyURL,并且这个TinyURL可以用解密方法恢复成原本的URL。class Solutio...原创 2020-05-25 22:16:17 · 289 阅读 · 0 评论 -
1395. 统计作战单位数
n 名士兵站成一排。每个士兵都有一个 独一无二 的评分 rating 。每 3 个士兵可以组成一个作战单位,分组规则如下:从队伍中选出下标分别为 i、j、k 的 3 名士兵,他们的评分分别为 rating[i]、rating[j]、rating[k] 作战单位需满足: rating[i] < rating[j] < rating[k] 或者 rating[i] > rating[j] > rating[k] ,其中 0<= i <j <k <...原创 2020-05-25 21:40:11 · 106 阅读 · 0 评论 -
468. 验证IP地址
编写一个函数来验证输入的字符串是否是有效的 IPv4 或IPv6 地址。IPv4地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为0 -255,用(".")分割。比如,172.16.254.1;同时,IPv4 地址内的数不会以 0 开头。比如,地址172.16.254.01 是不合法的。IPv6地址由8组16进制的数字来表示,每组表示16 比特。这些组数字通过 (":")分割。比如,2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一...原创 2020-05-22 22:22:35 · 134 阅读 · 0 评论 -
8. 字符串转换整数 (atoi)
请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。 假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。 该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个有..原创 2020-05-22 20:58:31 · 125 阅读 · 0 评论 -
2. 两数相加
给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807/** * Definition for singl...原创 2020-05-22 17:35:32 · 105 阅读 · 0 评论 -
3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"是一个...原创 2020-05-22 17:20:32 · 87 阅读 · 0 评论 -
1413. 逐步求和得到正数的最小值
给你一个整数数组 nums。你可以选定任意的正数 startValue 作为初始值。你需要从左到右遍历 nums数组,并将 startValue 依次累加上nums数组中的值。请你在确保累加和始终大于等于 1 的前提下,选出一个最小的正数作为 startValue 。示例 1:输入:nums = [-3,2,-3,4,2]输出:5解释:如果你选择 startValue = 4,在第三次累加时,和小于 1 。 累加求和 ...原创 2020-05-20 15:12:30 · 181 阅读 · 0 评论 -
1441. 用栈操作构建数组
给你一个目标数组 target 和一个整数 n。每次迭代,需要从 list = {1,2,3..., n} 中依序读取一个数字。请使用下述操作来构建目标数组 target :Push:从 list 中读取一个新元素, 并将其推入数组中。 Pop:删除数组中的最后一个元素。 如果目标数组构建完成,就停止读取更多元素。题目数据保证目标数组严格递增,并且只包含 1 到 n 之间的数字。请返回构建目标数组所用的操作序列。题目数据保证答案是唯一的。示例 1:输入:target ..原创 2020-05-19 22:11:47 · 202 阅读 · 0 评论 -
1403. 非递增顺序的最小子序列
给你一个数组 nums,请你从中抽取一个子序列,满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。如果存在多个解决方案,只需返回 长度最小 的子序列。如果仍然有多个解决方案,则返回 元素之和最大 的子序列。与子数组不同的地方在于,「数组的子序列」不强调元素在原数组中的连续性,也就是说,它可以通过从数组中分离一些(也可能不分离)元素得到。注意,题目数据保证满足所有约束条件的解决方案是 唯一 的。同时,返回的答案应当按 非递增顺序 排列。示例 1:输入:nums = .转载 2020-05-19 18:24:00 · 137 阅读 · 0 评论 -
605. 种花问题
假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数n。能否在不打破种植规则的情况下种入n朵花?能则返回True,不能则返回False。示例 1:输入: flowerbed = [1,0,0,0,1], n = 1输出: True示例 2:输入: flowerbed = [1,0,0,0,1], n = 2输出: ...原创 2020-05-17 18:30:57 · 190 阅读 · 0 评论 -
840. 矩阵中的幻方
3 x 3 的幻方是一个填充有从 1 到 9的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。给定一个由整数组成的grid,其中有多少个 3 × 3 的 “幻方” 子矩阵?(每个子矩阵都是连续的)。示例:输入: [[4,3,8,4], [9,5,1,9], [2,7,6,2]]输出: 1解释: 下面的子矩阵是一个 3 x 3 的幻方:438951276而这一个不是:384519762总的来说,在本示例所给...原创 2020-05-16 16:52:50 · 186 阅读 · 0 评论 -
949. 给定数字能组成的最大时间
给定一个由 4 位数字组成的数组,返回可以设置的符合 24 小时制的最大时间。最小的 24 小时制时间是00:00,而最大的是23:59。从 00:00 (午夜)开始算起,过得越久,时间越大。以长度为 5 的字符串返回答案。如果不能确定有效时间,则返回空字符串。示例 1:输入:[1,2,3,4]输出:"23:41"示例 2:输入:[5,5,5,5]输出:""提示:A.length == 4 0 <= A[i] <= 9cla...原创 2020-05-16 10:10:21 · 464 阅读 · 0 评论 -
680. 验证回文字符串 Ⅱ
给定一个非空字符串s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba"输出: True示例 2:输入: "abca"输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。class Solution {public: bool validPalindrome(string s) { if (s.size() < 3) { ..原创 2020-05-15 18:39:42 · 167 阅读 · 0 评论 -
482. 密钥格式化
有一个密钥字符串 S ,只包含字母,数字以及 '-'(破折号)。其中, N 个 '-' 将字符串分成了 N+1 组。给你一个数字 K,请你重新格式化字符串,除了第一个分组以外,每个分组要包含 K 个字符;而第一个分组中,至少要包含 1 个字符。两个分组之间需要用 '-'(破折号)隔开,并且将所有的小写字母转换为大写字母。给定非空字符串 S 和数字 K,按照上面描述的规则进行格式化。示例 1:输入:S = "5F3Z-2e-9-w", K = 4输出:"5F3Z-2E9W"解释:字.原创 2020-05-12 21:37:50 · 273 阅读 · 0 评论 -
970. 强整数, leetcode
给定两个正整数x和y,如果某一整数等于x^i + y^j,其中整数i >= 0且j >= 0,那么我们认为该整数是一个强整数。返回值小于或等于bound的所有强整数组成的列表。你可以按任何顺序返回答案。在你的回答中,每个值最多出现一次。示例 1:输入:x = 2, y = 3, bound = 10输出:[2,3,4,5,7,9,10]解释: 2 = 2^0 + 3^03 = 2^1 + 3^04 = 2^0 + 3^15 = 2^1 + 3...原创 2020-05-12 19:42:44 · 697 阅读 · 0 评论 -
按升序输出文档中包含的要查询的单词
在c++ primer第五版中第12章末尾要求输入一些文本,输出要查询的单词在原文本中总共有多少行包含该单词,并按升序输出该单词所在行号分析:既然要输出包含的单词所在行号,就要先将文本按行保存起来然后要求按升序输出,想到set类自动升序保存,同一行中包含多个要查询单词也只保存一次,符合要求也好用故写了个没有share_ptr的文本查询函数,如下不如书本大气灵原创 2016-11-03 20:43:20 · 310 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
判断给定序列是否为二叉数的后序遍历序列二叉树有良好定义,后序遍历序列,其最后一个节点是所在序列的根节点如2 ,6,4,9,12,10,7比7小的数是对应的左子树节点,大于7的是右子树节点这样就能有递归方式判断整个序列是否为二叉树的后序遍历序列首先找到比根节点小的所有数,记录位置,遍历该位置及其后除根节点的所有数,如果有小于根节点数的返回false,因为该位置及其后数是该原创 2016-10-23 21:37:19 · 256 阅读 · 0 评论 -
翻转链表
输入一个链表,从头到尾翻转,然后输出翻转后的头结点需要考虑的问题如果将链表首先遍历保存在栈中,保存后pop栈同时分配list空间进行保存,这种翻转的方法,要占用O(n)内存,O(n)时间所以有没有一种可能,遍历一遍并且也能输出,这种方法不会太费空间,时间O(n)所以就想,如果有j,i,k,三个连续节点,其k节点以前都已经翻转过,现在翻转i节点,如何翻转呢首先要做的是将i原创 2016-10-22 21:38:05 · 263 阅读 · 0 评论 -
两个数相减,不能用加减乘除做减法
两个数相减的思路和两个数想加差不多,唯一例外的地方当两个数相加时,首先加数和被加数异或,此时单纯相同位的相加,没有进位计算进位时,是两个数相与,只有1&1才能有进位,进位是向左边进一位,故相与得到的结果要向左移一位此时又可看作是两个新的不同的数相加,如此循环,直到进位为0,即可得到最终结果两数相减时先确定减数是减号左边的数,被减数是减号右边的数首先减数和被减原创 2016-09-19 20:55:43 · 1990 阅读 · 0 评论 -
翻转单词顺序
一个给定单词组反转其顺序,使其单词顺序相反,但单词本身数序不变总体思路两次翻转单词,则总的效果单词本身会不变,而单词序就会发生变化第一次先将每个单词依次翻转第二次 整体翻转如 abc第一次翻转成a'b'c'再一次翻转(a'b'c')' = (c')'(b')'(a')' = cba即abc-->cba结果成立原创 2016-09-13 21:46:32 · 433 阅读 · 0 评论 -
数组中只出现一次的数字
整个数组中只有两个数字各出现了一次,其余数字都出现了两次刚拿到题时可能没有思路,如果是数组中只有一个数字出现一次,其余数字都出现两次,如何求这一个只出现一次的数字呢我们想到异或的方法,相同为0,相异为1,通过将数组整体异或,就能得到只出现一次的数字想到这,如果我们把两个只出现一次的数字分别分到两个不同 的数组中,再分别对这两个数组用异或的方法就能找出两个只出现一原创 2016-09-12 19:42:11 · 282 阅读 · 0 评论 -
二叉搜索树的前序遍历序列
将二叉树画出来,得到其前序遍历序列,争取发现一些规律,发现规律后就属于实现问题观察该序列,发现,根节点在第一个位置上,其后左子树都小于根节点,右子树大于该节点根节点的左右子树相当于另一颗树,可以用同样的方法得到故bool verifyPreorderSequence(int *s,int length){if(s == NULL || length //判断返回条件原创 2016-08-31 20:11:12 · 978 阅读 · 0 评论 -
归并排序
O(nlgn)时间需要额外空间,在n比较大时比插入排序O(n*n)时间要快快速排序是直接的原址排序,所费时间同是O(nlgn)先把代码贴进来,有相关注释/******************归并排序O(nlgn)时间create by tianlanli2016/6/16*******************/#include#i原创 2016-06-16 00:32:31 · 243 阅读 · 0 评论 -
算法导论习题2-2-2
本题所谓选择算法和插入算法在本质上很接近,都是依次遍历大的循环,在本题中,找到最小值索引,和大循环变量进行交换即可具体代码 由此可见,最坏最好情况下,时间复杂度都是theta(n^2)原创 2016-04-21 00:24:06 · 457 阅读 · 0 评论 -
819. 最常见的单词
给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。题目保证至少有一个词不在禁用列表中,而且答案唯一。禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。示例:输入: paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."banned = ["hit"]输出: "ball"解释: "h..原创 2020-05-12 18:20:39 · 119 阅读 · 0 评论 -
443. 压缩字符串
给定一组字符,使用原地算法将其压缩。压缩后的长度必须始终小于或等于原数组长度。数组的每个元素应该是长度为1的字符(不是 int 整数类型)。在完成原地修改输入数组后,返回数组的新长度。进阶:你能否仅使用O(1) 空间解决问题?示例 1:输入:["a","a","b","b","c","c","c"]输出:返回6,输入数组的前6个字符应该是:["a","2","b","2","c","3"]说明:"aa"被"a2"替代。"bb"被"b2"替代。"ccc"...原创 2020-05-12 15:59:20 · 86 阅读 · 0 评论 -
1346. 检查整数及其两倍数是否存在
给你一个整数数组arr,请你检查是否存在两个整数N和M,满足N是M的两倍(即,N = 2 * M)。更正式地,检查是否存在两个下标i和j满足:i != j 0 <= i, j < arr.length arr[i] == 2 * arr[j]示例 1:输入:arr = [10,2,5,3]输出:true解释:N = 10 是 M = 5 的两倍,即 10 = 2 * 5 。示例 2:输入:arr = [7,1,14,11]输出:...原创 2020-05-11 21:16:02 · 161 阅读 · 0 评论 -
290. 单词规律
给定一种规律pattern和一个字符串str,判断str是否遵循相同的规律。这里的遵循指完全匹配,例如,pattern里的每个字母和字符串str中的每个非空单词之间存在着双向连接的对应规律。示例1:输入: pattern = "abba", str = "dog cat cat dog"输出: true示例 2:输入:pattern = "abba", str = "dog cat cat fish"输出: false示例 3:输入: patt...原创 2020-05-11 20:54:52 · 138 阅读 · 0 评论 -
1010. 总持续时间可被 60 整除的歌曲, leetcode
在歌曲列表中,第i首歌曲的持续时间为time[i]秒。返回其总持续时间(以秒为单位)可被60整除的歌曲对的数量。形式上,我们希望索引的数字i和j满足i < j且有(time[i] + time[j]) % 60 == 0。示例 1:输入:[30,20,150,100,40]输出:3解释:这三对的总持续时间可被 60 整数:(time[0] = 30, time[2] = 150): 总持续时间 180(time[1] = 20, time[3]...原创 2020-05-11 17:32:39 · 90 阅读 · 0 评论 -
367. 有效的完全平方数
给定一个正整数num,编写一个函数,如果num是一个完全平方数,则返回 True,否则返回 False。说明:不要使用任何内置的库函数,如sqrt。示例 1:输入:16输出:True示例 2:输入:14输出:False关键是大数的处理mid * mid 可能会溢出,所以需要num / mid && mid * mid == num来判断是否是平方数class Solution {public: bool isPerfectSqu...原创 2020-05-11 17:23:08 · 148 阅读 · 0 评论 -
989. 数组形式的整数加法
对于非负整数X而言,X的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果X = 1231,那么其数组形式为[1,2,3,1]。给定非负整数X的数组形式A,返回整数X+K的数组形式。示例 1:输入:A = [1,2,0,0], K = 34输出:[1,2,3,4]解释:1200 + 34 = 1234示例 2:输入:A = [2,7,4], K = 181输出:[4,5,5]解释:274 + 181 = 455示例 3:输入:A ...原创 2020-05-11 16:57:05 · 148 阅读 · 0 评论 -
35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/se...原创 2020-05-10 21:42:52 · 56 阅读 · 0 评论 -
599. 两个列表的最小索引总和
假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设总是存在一个答案。示例 1:输入:["Shogun", "Tapioca Express", "Burger King", "KFC"]["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse"原创 2020-05-10 21:28:34 · 145 阅读 · 0 评论 -
1417. 重新格式化字符串
给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母。请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。请你返回 重新格式化后 的字符串;如果无法按要求重新格式化,则返回一个 空字符串 。示例 1:输入:s = "a0b1c2"输出:"0a1b2c"解释:"0a1b2c" 中任意两个相邻字符的类型都不同。 "a0b1c2", "0a1b2c", "0c2a1b" 也是满足题目要求的答案。示例 2:...原创 2020-05-10 21:20:41 · 153 阅读 · 0 评论 -
leetcode 相同字母组成的不同单词归为一类即所谓的变位词
要想把相同字幕组成的单词归为一类,首先有的想法应该是如何定位或找到这些由相同字母组成的不同单词一个直观的想法是由给定单词,依次遍历词库,对给定词和词库的每个词先按字母顺序表排序,相同的归为一类这样花费时间多,也不利于实时处理另一个想法则是首先预处理,对词库中的每个单词按字典先排序,一样的放在一个容器中,等真正用时就可以快速检索;代码如下:原创 2016-07-28 16:49:15 · 918 阅读 · 0 评论 -
leetcode 343 Interger Break
要求输入整数,求其分解后整数相乘的最大数根据提示,将7-10分解,可以发现4 = 2 * 2 === 2 + 25 = 3 * 2 === 3 + 26 = 3 * 3 === 3 + 37 = 3 * 4 === 3 + 48 = 3 * 3 * 2 = == 3 + 5 9 = 3 * 3 * 3 === 3 + 6 输入整数N的最终形式都是3*3*.....*原创 2016-04-25 20:58:17 · 291 阅读 · 0 评论 -
leetcode 345Reverse vowels of a string
元音字母有大小写整体思路,顺序度string,碰到元音字母就存起来,读完再顺序读一遍,这次碰到元音字母就用存起来的数组倒序替换class Solution {public: string reverseVowels(string s) { istringstream str(s);//将string字符绑定到输入流 vectorvo原创 2016-04-25 19:44:33 · 377 阅读 · 0 评论