LintCode刷题指南
主要讲解LintCode刷题解题思路,还有一些总结
Oeljeklaus
python开发,大数据,图数据,数据分析
展开
-
211. 字符串置换
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。置换的意思是,通过改变顺序可以使得两个字符串相等。样例"abc" 为 "cba" 的置换。"aabc" 不是 "abcc" 的置换。解题思路 可以使用HashMap求解,先将字符串A的字符hash到里面,然后在将字符串B...原创 2018-06-11 15:23:45 · 980 阅读 · 0 评论 -
212. 空格替换
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。你的程序还需要返回被替换后的字符串的长度。样例对于字符串"Mr John Smith", 长度为 13替换空格之后,参数中的字符串需要变为"Mr%20John%20Sm...原创 2018-06-11 15:27:00 · 809 阅读 · 0 评论 -
213. 字符串压缩
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求设计一种方法,通过给重复字符计数来进行基本的字符串压缩。例如,字符串 aabcccccaaa 可压缩为 a2b1c5a3 。而如果压缩后的字符数不小于原始的字符数,则返回原始的字符串。可以假设字符串仅包括a-z的字母。样例str=aabcccccaaa 返回 a2b1c5a3str=aabbcc 返回...原创 2018-06-11 15:40:45 · 1177 阅读 · 0 评论 -
365. 二进制中有多少个1
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求计算在一个 32 位的整数的二进制表示中有多少个 1.样例给定 32 (100000),返回 1给定 5 (101),返回 2给定 1023 (1111111111),返回 10挑战If the integer is n bits with m 1 bits. Can you do it in O(m...原创 2018-06-11 15:43:14 · 1012 阅读 · 0 评论 -
366. 斐波纳契数列
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求描述查找斐波纳契数列中第 N 个数。所谓的斐波纳契数列是指:前2个数是 0 和 1 。第 i 个数是第 i-1 个数和第i-2 个数的和。斐波纳契数列的前10个数字是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...样例给定 1,返回 0给定 2,返回 1给定 10,返回 34解...原创 2018-06-11 15:45:41 · 852 阅读 · 0 评论 -
413. 反转整数
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数)。样例给定 x = 123,返回 321给定 x = -123,返回 -321解题思路 使用队列,现将数字转化为一个个数,然后在重新拼凑,要注意数字溢出。实现代码class Solution {public:...原创 2018-06-11 15:49:07 · 828 阅读 · 0 评论 -
423. 有效的括号序列
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列。样例括号必须依照 "()" 顺序表示, "()[]{}" 是有效的括号,但 "([)]"则是无效的括号。解题思路 使用栈,如果匹配就出栈,看最后栈中是否有剩...原创 2018-06-11 15:52:29 · 850 阅读 · 0 评论 -
457. 经典二分查找问题
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求在一个排序数组中找一个数,返回该数出现的任意位置,如果不存在,返回-1样例给出数组 [1, 2, 2, 4, 5, 5].对于 target = 2, 返回 1 或者 2.对于 target = 5, 返回 4 或者 5.对于 target = 6, 返回 -1.挑战O(logn) 的时间解题思路 ...原创 2018-06-11 15:55:00 · 847 阅读 · 0 评论 -
464. 整数排序 II
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。样例给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。解题思路 使用快排。实现代码class Solution {public: /** ...原创 2018-06-11 15:56:46 · 873 阅读 · 0 评论 -
1. A + B 问题
题目要求 LintCode的第一题,A+B问题,这里要求不能使用+运算符来进行求解。主要的解题思路 考虑到不能使用+运算符来解决这道题,我们可以想到位运算。我们首先来看一下例子 5+7的运算过程如下 5对应的二进制代码:101. 7对应的二进制代码:111 5+7的运算结果是12,对应的二进制代码是1100 我们可以将这个过程分解为三步: 第一...原创 2018-06-02 21:02:15 · 1255 阅读 · 0 评论 -
6. 合并排序数组 II
题目要求 合并两个排序的整数数组A和B变成一个新的数组。 样例 给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6] 挑战 你能否优化你的算法,如果其中一个数组很大而另一个数组很小?解题思路 在确定两个排序的数组后,一般的解题思路是,使用循环比较大小,然后在根据大小排序插入。 我们可以这样考虑,从数组的尾端开始,我们...原创 2018-06-02 21:13:36 · 1481 阅读 · 0 评论 -
8. 旋转字符串
题目需求给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)样例对于字符串 "abcdefg".offset=0 => "abcdefg"offset=1 => "gabcdef"offset=2 => "fgabcde"offset=3 => "efgabcd"挑战在数组上原地旋转,使用O(1)的额外空间解题思路 思路主要分为三原创 2018-06-02 21:24:08 · 3051 阅读 · 1 评论 -
9. Fizz Buzz 问题
题目需求 描述给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:如果这个数被3整除,打印fizz.如果这个数被5整除,打印buzz.如果这个数能同时被3和5整除,打印fizz buzz.您在真实的面试中是否遇到过这个题? 是样例比如 n = 15, 返回一个字符串数组:[ "1", "2", "fizz", "4", "buzz", "fizz", "原创 2018-06-02 21:27:18 · 1695 阅读 · 0 评论 -
12. 带最小值操作的栈
题目需求 描述 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。 样例 如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回 1,2,1解题思路 主要的解题思路是: ...原创 2018-06-02 21:34:10 · 1217 阅读 · 0 评论 -
14. 二分查找
题目需求 描述 给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。 样例 在数组 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2。 挑战 如果数组中的整数个数超过了2^32...原创 2018-06-03 08:50:43 · 1208 阅读 · 0 评论 -
28. 搜索二维矩阵
题目需求 描述 写出一个高效的算法来搜索 m × n矩阵中的值。 这个矩阵具有以下特性: 每行中的整数从左到右是排序的。 每行的第一个数大于上一行的最后一个整数。 样例 考虑下列矩阵:[ [1, 3, 5, 7], [10...原创 2018-06-03 08:57:55 · 1266 阅读 · 0 评论 -
15. 全排列
题目需求 给定一个数字列表,返回其所有可能的排列。 样例 给出一个列表[1,2,3],其全排列为:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]挑战使用递归和非递归分别解决。解题思路 这道题,主要使用的是回溯法,这里我们使用4个方法来进行回溯法的拆解。is_a_solut...原创 2018-06-03 09:18:25 · 1237 阅读 · 0 评论 -
16. 带重复元素的排列
题目需求 给出一个具有重复数字的列表,找出列表所有不同的排列。样例 给出列表 [1,2,2],不同的排列有:[ [1,2,2], [2,1,2], [2,2,1]]挑战使用递归和非递归分别完成该题。解题思路 这道题是在全排列的基础上解决的,对于不理解全排列的同学,可以我的上一篇文章全排列.由于有重复的元素,那么我们需要剪枝,这里我们使用一个map来进行判断,如果...原创 2018-06-03 09:30:24 · 1329 阅读 · 0 评论 -
35. 翻转链表
题目需求 翻转一个链表 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null 挑战 在原地一次翻转完成实现的思路 主要的思路是;使用两个指针,指向遍历链表的前面的节点,一个指针用来保存后后面的节点。实现的代码/** * Definition of singly-...原创 2018-06-03 10:58:30 · 1147 阅读 · 0 评论 -
38. 搜索二维矩阵 II
题目需求 描述 写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数。 这个矩阵具有以下特性:每行中的整数从左到右是排序的。每一列的整数从上到下是排序的。在每一行或每一列中没有重复的整数。样例考虑下列矩阵:[ [1, 3, 5, 7], [2, 4, 7, 8], [3, 5, 9, 10]]给出target = 3,返回 2挑战要求O(m+n) 时间...原创 2018-06-03 11:03:37 · 1313 阅读 · 0 评论 -
40. 用栈实现队列
题目需求 描述 正如标题所述,你需要使用两个栈来实现队列的一些操作。 队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。 pop和top方法都应该返回第一个元素的值。 样例 比如push(1), pop(), push(2), push(3), top(), ...原创 2018-06-03 11:09:43 · 1203 阅读 · 0 评论 -
41. 最大子数组
题目需求 描述 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。 样例 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6 挑战 要求时间复杂度为O(n)解题思路 利用动态规划,我们这里使用一个数组保存每一个阶段的和。这里主要的步骤是: 1.如果一个...原创 2018-06-03 11:17:12 · 1218 阅读 · 0 评论 -
44. 最小子数组
题目需求描述给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。样例给出数组[1, -1, -2, 1],返回 -3解题思路 也是动态规划问题,如果不懂得同学,可以看我的这篇文章最大子数组实现代码class Solution {public: /* * @param nums: a list of integers * @return: A intege...原创 2018-06-03 11:21:02 · 1158 阅读 · 0 评论 -
46. Majority Element
题目需求给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。样例给出数组[1,1,1,1,2,2,2],返回 1挑战要求时间复杂度为O(n),空间复杂度为O(1)解题思路 主要的思路是遍历一遍,先设置次数为1,如果前一个元素和当前元素不同,计数器减一,如果等于0,重新开始设置,如果相等,那么计数器加一,最后留下的元素,一定是主元素。实现代码class Solut...原创 2018-06-03 11:26:51 · 1297 阅读 · 0 评论 -
49. 字符大小写排序
题目需求 描述 给定一个只包含字母的字符串,按照先小写字母后大写字母的顺序进行排序。 样例 给出"abAcD",一个可能的答案为"acbAD" 挑战 在原地扫描一遍完成解题思路 利用快速排序,不过这里使用的哨兵是'a'实现代码class Solution {public: /* * @param chars:...原创 2018-06-04 08:38:03 · 1820 阅读 · 0 评论 -
55. 比较字符串
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。需求描述比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母样例给出 A = "ABCD" B = "ACD",返回 true给出 A = "ABCD" B = "AABC", 返回 false解题思路 题目给出的大写字母,所以有26个,我们可以创建一个26长度的数组...原创 2018-06-05 08:51:24 · 1155 阅读 · 0 评论 -
56. 两数之和
题目需求描述给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。样例给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1].挑战Either of the following solutions are accep...原创 2018-06-05 08:56:44 · 1298 阅读 · 0 评论 -
57. 三数之和
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求 给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。样例 如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集合的是: (-1, 0, 1) (-1, -1, 2)解题思路 ...原创 2018-06-05 09:11:09 · 1390 阅读 · 0 评论 -
60. 搜索插入位置
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求 描述 给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。 你可以假设在数组中无重复元素。 样例 [1,3,5,6],5 → 2 [1,3,5,6],2 → 1 ...原创 2018-06-05 09:15:23 · 1099 阅读 · 0 评论 -
64. 合并排序数组
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求描述合并两个排序的整数数组A和B变成一个新的数组。样例给出 A = [1, 2, 3, empty, empty], B = [4, 5]合并之后 A 将变成 [1,2,3,4,5]解题思路 从后向前合并。实现代码class Solution {public: /* ...原创 2018-06-05 09:18:47 · 1293 阅读 · 0 评论 -
66. 二叉树的前序遍历
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求 描述 给出一棵二叉树,返回其节点值的前序遍历。 样例 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3]. 挑战 你能...原创 2018-06-05 09:24:15 · 1163 阅读 · 0 评论 -
67. 二叉树的中序遍历
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求 描述 给出一棵二叉树,返回其中序遍历 样例给出二叉树 {1,#,2,3},1 \ 2 / 3返回 [1,3,2].挑战你能使用非递归算法来实现么?解题思路 使用递归,只是在保存元素的顺序和前序不...原创 2018-06-05 09:30:36 · 1117 阅读 · 0 评论 -
68. 二叉树的后序遍历
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求 描述 给出一棵二叉树,返回其节点值的后序遍历。 样例 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [3,2,1] 挑战 你能使用非递归实现么?解题思路 ...原创 2018-06-05 09:33:51 · 1108 阅读 · 0 评论 -
69. 二叉树的层次遍历
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求 描述 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 样例 给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7 返回他的分层遍历结...原创 2018-06-05 09:38:19 · 1281 阅读 · 0 评论 -
80.中位数
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。样例给出数组[4, 5, 1, 2, 3], 返回 3给出数组[7, 9, 4, 5],返回 5挑战时间复杂度为O(n)解题思路 使用快排。实现代码class Sol...原创 2018-06-05 11:49:08 · 1160 阅读 · 0 评论 -
109. 数字三角形
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。样例比如,给出下列数字三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]从顶到底部的最小路径和为11 ( 2 + 3 + 5 + 1 = 11)。解题思路 ...原创 2018-06-06 08:32:06 · 1221 阅读 · 0 评论 -
422. 最后一个单词的长度
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求给定一个字符串, 包含大小写字母、空格' ',请返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。样例给定 s = "Hello World",返回 5。解题思路 以空格切分,然后返回最后单词长度。实现代码public class Solution { /** *...原创 2018-06-06 08:32:01 · 1201 阅读 · 0 评论 -
138. 子数组之和
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置样例给出 [-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3].解题思路 依次求出各个子数组之和,不过要注意数组内出现0实现代码class Solution {public: ...原创 2018-06-06 08:31:55 · 1158 阅读 · 0 评论 -
464. 整数排序 II
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。样例给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。解题思路 考察基本算法。实现代码class Solution {public: /** ...原创 2018-06-06 08:31:47 · 1154 阅读 · 0 评论 -
480. 二叉树的所有路径
提示 LintCode中的相关算法题实现代码,可以在我的GitHub中下载。题目需求给一棵二叉树,找出从根节点到叶子节点的所有路径。样例给出下面这棵二叉树: 1 / \2 3 \ 5所有根到叶子的路径为:[ "1->2->5", "1->3"]解题思路 将整棵树进行前序遍历,需要使用一个vector记录路径,不过需要注意判断...原创 2018-06-06 09:22:04 · 1217 阅读 · 0 评论