LeetCode
文章平均质量分 61
cosmos_lee
这个作者很懒,什么都没留下…
展开
-
Lintcode:旋转链表
描述给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数样例给出链表1->2->3->4->5->null和k=2返回4->5->1->2->3->null 思路:先算出链表的长度len,然后 k%len,可以得出实际移动的次数。 然后使用一个快慢指针,快的先走k步,然后...原创 2018-08-31 20:29:16 · 195 阅读 · 0 评论 -
Lintcode:最长公共前缀
描述给k个字符串,求出他们的最长公共前缀(LCP)样例在 "ABCD" "ABEF" 和 "ACEF" 中, LCP 为 "A"在 "ABCDEFG", "ABCEFG", "ABCEFA" 中, LCP 为 "ABC"思路: 就是对每个数组元素进行遍历判断,从第0位开始判断,直到第j位有字符串不相等或者有字符串的长度小于,此时退出循环判断。Jav原创 2018-06-20 11:41:24 · 155 阅读 · 0 评论 -
Lint code:最长公共子序列
描述给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。说明最长公共子序列的定义:最长公共子序列问题是在一组序列(通常2个)中找到最长公共子序列(注意:不同于子串,LCS不需要是连续的子串)。该问题是典型的计算机科学问题,是文件差异比较程序的基础,在生物信息学中也有所应用。https://en.wikipedia.org/wiki/Longest_common_subsequence_...原创 2018-06-20 10:54:26 · 123 阅读 · 0 评论 -
LIntcode:二叉树的层次遍历 II
描述给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历)样例给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7按照从下往上的层次遍历为:[ [15,7], [9,20], [3]]思路: 就是直接使用层序遍历,每一层都保存进一个单独的list中,最...原创 2018-06-20 10:45:58 · 349 阅读 · 0 评论 -
Lint Code: 单词拆分 I
描述给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词。样例给出s = "lintcode"dict = ["lint","code"]返回 true 因为"lintcode"可以被空格切分成"lint code"思路这道题其实是一个字符串匹配+动态规划问题,它的子问题结构还是比较容易看出来的。首先定义 dp[i] : 到字符串s的第i个位置都可以匹配。子问题...原创 2018-07-08 10:54:48 · 277 阅读 · 0 评论 -
LintCode:验证二叉查找树
描述给定一个二叉树,判断它是否是合法的二叉查找树(BST)一棵BST定义为:节点的左子树中的值要严格小于该节点的值。节点的右子树中的值要严格大于该节点的值。左右子树也必须是二叉查找树。一个节点的树也是二叉查找树。样例一个例子: 2 / \1 4 / \ 3 5上述这棵二叉树序列化为 {2,1,4,#,#,3,5}.思路: 分治法,递归判断当前以当前节点为根的数是不是二叉查...原创 2018-06-26 12:08:46 · 229 阅读 · 0 评论 -
Lintcode75:寻找峰值
描述你给出一个整数数组(size为n),其具有以下特点:相邻位置的数字是不同的A[0] < A[1] 并且 A[n - 2] > A[n - 1]假定P是峰值的位置则满足A[P] > A[P-1]且A[P] > A[P+1],返回数组中任意一个峰值的位置。It's guaranteed the array has at least one peak.The array ma...原创 2018-06-19 10:09:42 · 343 阅读 · 0 评论 -
LintCode:重排链表
描述给定一个单链表L: L0→L1→…→Ln-1→Ln,重新排列后为:L0→Ln→L1→Ln-1→L2→Ln-2→…必须在不改变节点值的情况下进行原地操作。样例给出链表 1->2->3->4->null,重新排列后为1->4->2->3->null。挑战Can you do this in-place without altering the nod...原创 2018-06-29 20:07:28 · 207 阅读 · 0 评论 -
Lintcode74:第一个错误的代码版本(二分法)
描述代码库的版本号是从 1 到 n 的整数。某一天,有人提交了错误版本的代码,因此造成自身及之后版本的代码在单元测试中均出错。请找出第一个错误的版本号。你可以通过 isBadVersion 的接口来判断版本号 version 是否在单元测试中出错,具体接口详情和调用方法请见代码的注释部分。请阅读上述代码,对于不同的语言获取正确的调用 isBadVersion 的方法,比如java的调用方式是SVN...原创 2018-06-18 16:22:05 · 316 阅读 · 0 评论 -
Lintcode72:中序遍历和后序遍历树构造二叉树
描述根据中序遍历和后序遍历树构造二叉树你可以假设树中不存在相同数值的节点样例给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2]返回如下的树: 2 / \1 3思路: 很容易地想到了递归,每次后序遍历数组的最后一个元素代表当前的根节点,然后分别找到左子树,右子树的中序,后序数组下标,递归求解就可以了。Java代码: public TreeNode buildTree(i...原创 2018-06-18 15:54:34 · 316 阅读 · 0 评论 -
Lintcode51:上一个排列
描述给定一个整数数组来表示排列,找出其上一个排列。排列中可能包含重复的整数样例给出排列[1,3,2,3],其上一个排列是[1,2,3,3]给出排列[1,2,3,4],其上一个排列是[4,3,2,1]思路:做这一题时,我们可以先回顾下求下一个排列,https://blog.csdn.net/u012156116/article/details/80704719理解了上一题,这一题就很好做了:同样的例...原创 2018-06-15 15:09:32 · 685 阅读 · 0 评论 -
lintcode52:下一个排列
描述给定一个整数数组来表示排列,找出其之后的一个排列。排列中可能包含重复的整数样例给出排列[1,3,2,3],其下一个排列是[1,3,3,2]给出排列[4,3,2,1],其下一个排列是[1,2,3,4]思路:1. 先找到需要改变的高位:从右向左扫描排列,若一直满足nums[i] > nums[i - 1],则说明这些元素是满足高位大于低位的,不需操作,直到找到nums[i] < num...原创 2018-06-15 14:15:21 · 298 阅读 · 0 评论 -
Lintcode:落单的数 II
描述给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。样例给出 [1,1,2,3,3,3,2,2,4,1] ,返回 4挑战一次遍历,常数级的额外空间复杂度思路: 在落单的数1中,我们直接将所有的数异或,那么重复的数就直接去掉了,最后的结果就是那个落单的数。那么在我们这道题中有两种思路:1. 还是根据位运算,按位计算。int型数字占32位,如果这个数字出现3次,则...原创 2018-06-22 10:06:58 · 225 阅读 · 0 评论 -
Lintcode49:字符大小写排序
描述给定一个只包含字母的字符串,按照先小写字母后大写字母的顺序进行排序。小写字母或者大写字母他们之间不一定要保持在原始字符串中的相对位置。样例给出"abAcD",一个可能的答案为"acbAD"挑战在原地扫描一遍完成思路: 很像快速排序的那个partition函数,很简单,一个头指针 pre ,一个尾指针last,每次遍历,pre指针找到大写的,last指针找到小写的,然后交换下,迭代至两指针相遇...原创 2018-06-14 11:11:49 · 307 阅读 · 0 评论 -
Lint Code:LRU缓存策略
描述为最近最少使用(LRU)缓存策略设计一个数据结构,它应该支持以下操作:获取数据(get)和写入数据(set)。获取数据get(key):如果缓存中存在key,则获取其数据值(通常是正数),否则返回-1。写入数据set(key, value):如果key还没有在缓存中,则写入其数据值。当缓存达到上限,它应该在写入新数据之前删除最近最少使用的数据用来腾出空闲位置。思路: 下图是借用的别人的一张图,...原创 2018-06-27 14:57:44 · 168 阅读 · 0 评论 -
Lint Code:分割回文串 II
描述给定一个字符串s,将s分割成一些子串,使每个子串都是回文。返回s符合要求的的最少分割次数。样例比如,给出字符串s = "aab",返回 1, 因为进行一次分割可以将字符串s分割成["aa","b"]这样两个回文子串思路:显然,看到这种最大最小问题,当然是动态规划问题,当然这道题也可以使用DFS来做。说下动态规划思路,先定义问题结构 : dp[i] : 代表到s的前i个字符是否为回文。然后我们就...原创 2018-07-09 14:39:59 · 520 阅读 · 0 评论 -
LintCode:拓扑排序
拓扑排序:graph 节点结构:public class DirectedGraphNode { public int label; public ArrayList<DirectedGraphNode> neighbors; public DirectedGraphNode(int x) { label = x; ne...原创 2018-08-20 19:11:13 · 196 阅读 · 0 评论 -
网易内推笔试
第一题:n,总时间大小,k可以叫醒一次后清醒的时间 然后输入两个 0,1序列,长度大小为n, 第一个代表一节课的清醒序列, 第二个代表一节课的每个时刻的学习成就率。 求最高学习得分值。 直接遍历求解就行了。public static void main(String[] args) { Scanner scanner=new Scanner(System.in); ...原创 2018-08-11 20:22:05 · 788 阅读 · 0 评论 -
Lint Code:最长连续序列
描述给定一个未排序的整数数组,找出最长连续序列的长度。您在真实的面试中是否遇到过这个题? 是说明要求你的算法复杂度为O(n)样例给出数组[100, 4, 200, 1, 3, 2],这个最长的连续序列是 [1, 2, 3, 4],返回所求长度 4 思路:首先想到的肯定是排序,这题直接排序,然后遍历一遍就可以,但是这肯定不是想要的答案,排序的话复杂度最低也是...原创 2018-07-29 15:17:03 · 194 阅读 · 0 评论 -
LintCode : 重哈希
描述哈希表容量的大小在一开始是不确定的。如果哈希表存储的元素太多(如超过容量的十分之一),我们应该将哈希表容量扩大一倍,并将所有的哈希值重新安排。假设你有如下一哈希表:size=3, capacity=4[null, 21, 14, null] ↓ ↓ 9 null ↓ null哈希函数为:int hashcode(int key,...原创 2018-07-15 17:17:49 · 521 阅读 · 0 评论 -
Lintcode: 单词搜索
描述给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。样例给出board =[ "ABCE", "SFCS", "ADEE"]word = "ABCCED", ->返回 true,word = "SEE",-> 返回 true,word = &quo原创 2018-07-13 11:23:49 · 543 阅读 · 0 评论 -
LintCode:编辑距离
描述给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。你总共三种操作方法:插入一个字符删除一个字符替换一个字符样例给出 work1="mart" 和 work2="karma"返回 3思路使用dp, 先定义状态 f(i)(j) 单词1 的前i个 跟 单词2 的前j个 的最短编辑距离。如果 a[i] == b[j] , 那么f(i,j) = f(i-1,j-1)...原创 2018-07-13 10:12:24 · 308 阅读 · 0 评论 -
LintCode: Convert Sorted List to Binary Search Tree
描述给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树样例 21->2->3 => / \ 1 3思路:每次找到链表的中点,中点作为根节点,然后左边的链表形成的树为这个根节点的左子树,右边同理。需要注意的是,每次我们实际找的是中点前一个节点, 因为我们需要将前半段的链表断开,形成一个独立的链表。...原创 2018-07-06 15:52:54 · 134 阅读 · 0 评论 -
Lintcode : Merge K Sorted Lists
描述合并k个排序链表,并且返回合并后的排序链表。尝试分析和描述其复杂度。样例给出3个排序链表[2->4->null,null,-1->null],返回 -1->2->4->null思路:1. 利用归并排序,先两两合并,依次迭代,这里是利用一个递归的归并排序 public ListNode mergeKLists(List<ListNode> l...原创 2018-07-05 11:33:12 · 132 阅读 · 0 评论 -
Lintcode116:跳跃游戏
描述给出一个非负整数数组,你最初定位在数组的第一个位置。 数组中的每个元素代表你在那个位置可以跳跃的最大长度。 判断你是否能到达数组的最后一个位置。样例A = [2,3,1,1,4],返回 true.A = [3,2,1,0,4],返回 false.思路:1. 动态规划,可以看作一个动态规划的问题,d(i)看作位置i能到达的最远位置。状态转移方程:如果 d(i-1)>=i, d(i...原创 2018-05-23 23:47:49 · 254 阅读 · 0 评论 -
LintCode:删除排序链表中的重复数字 II
描述给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。样例给出 1->2->3->3->4->4->5->null,返回 1->2->5->null给出 1->1->1->2->3->null,返回 2->3->null思路:既然需要删除重复的元素,那么最重原创 2018-07-11 10:07:54 · 352 阅读 · 0 评论 -
LintCode:堆化
描述给出一个整数数组,堆化操作就是把它变成一个最小堆数组。对于堆数组A,A[0]是堆的根,并对于每个A[i],A [i * 2 + 1]是A[i]的左儿子并且A[i * 2 + 2]是A[i]的右儿子。说明什么是堆?堆是一种数据结构,它通常有三种方法:push, pop 和 top。其中,“push”添加新的元素进入堆,“pop”删除堆中最小/最大元素,“top”返回堆中最小/...原创 2018-07-16 20:30:30 · 229 阅读 · 0 评论 -
LintCode: 带环链表 + 带环链表 II
1. 带环链表描述给定一个链表,判断它是否有环。样例给出 -21->10->4->5, tail connects to node index 1,返回 true挑战不要使用额外的空间思路: 可以先看上面这个图,a 是 起点,b 是 环的起点,b到d是一个环。这个c点是什么呢,下面我们来说说。首先链表的题目,我们首先会想到快慢指针,没错,这道题就用到了快慢指针。 c 就是快慢指针...原创 2018-07-03 20:34:38 · 191 阅读 · 0 评论 -
LintCode : 不同的子序列
描述给出字符串S和字符串T,计算S的不同的子序列中T出现的个数。子序列字符串是原始字符串通过删除一些(或零个)产生的一个新的字符串,并且对剩下的字符的相对位置没有影响。(比如,“ACE”是“ABCDE”的子序列字符串,而“AEC”不是)。 样例给出S = "rabbbit", T = "rabbit"返回 3思路:动态规划问题,一开始没有想出思路,看了: http://www.cnblogs.co...原创 2018-07-10 17:00:56 · 189 阅读 · 0 评论 -
LintCode: 拓扑排序
描述给定一个有向图,图节点的拓扑排序被定义为:对于每条有向边A--> B,则A必须排在B之前 拓扑排序的第一个节点可以是任何在图中没有其他节点指向它的节点 找到给定图的任一拓扑排序你可以假设图中至少存在一种拓扑排序说明Learn more about representation of graphs样例对于下列图:这个图的拓扑排序可能是:[0, 1, 2, 3, 4, 5]或者[0, 2...原创 2018-07-10 10:07:32 · 231 阅读 · 0 评论 -
Lint Code48: 主元素3
描述给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的1/k。数组中只有唯一的主元素样例给出数组 [3,1,2,3,2,3,3,4,4,4] ,和 k = 3,返回 3挑战要求时间复杂度为O(n),空间复杂度为O(k)思路: 如果 k>=3,那么我们反而好做了,直接使用HashMap不就完事了吗,Java代码如下: public int majorityNumbe...原创 2018-06-14 11:08:46 · 250 阅读 · 0 评论 -
LintCode:最长公共子串
描述给出两个字符串,找到最长公共子串,并返回其长度。子串的字符应该连续的出现在原字符串中,这与子序列有所不同。样例给出A=“ABCD”,B=“CBCE”,返回 2挑战O(n x m) time and memory.思路这是一道动态规划题目,一开始没想到这方面,因为是字串而不是子序列。后来手绘了一下下面这个例子,才想到了状态转移方程,这是一道动态规划题目。 CBCEA0000D0000B0100C...原创 2018-06-21 09:58:27 · 152 阅读 · 0 评论 -
lintcode: 二叉树的最大深度
题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。思路:1. 采用分治法 这个方法充分体现的递归的精华。我自己没这么做。 public int maxDepth(TreeNode root) { if (root == null) { return 0; } int left = m...原创 2018-04-19 15:15:02 · 150 阅读 · 0 评论 -
lintcode:统计数字
题目:计算数字k在0到n中的出现的次数,k可能是0~9的一个值样例例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1, 10, 11, 12)思路:这道题其实剑指offer上面有过,但是剑指offer上面是数字1出现的次数。对于数字1-9,其实跟1的思路都一样,这里在再贴一下:https://blog.csdn...原创 2018-04-19 10:46:26 · 248 阅读 · 0 评论 -
lintcode:丑数2
题目:设计一个算法,找出只含素因子2,3,5 的第 n 小的数。符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...思路:最简单的就是从1开始遍历,判断这个数是否满足条件:只含素因子2,3,5 ,但是这样时间复杂度太高了。可以换种思路,我们每次保存已经寻找到的丑数,然后设置三个指针 n2, n3, n5, 保存乘2,乘3,乘5的数,每次取这三个数中最小的数。如果当前保...原创 2018-04-18 17:30:53 · 566 阅读 · 0 评论 -
LeetCode206: 反转链表
反转一个单链表。进阶:链表可以迭代或递归地反转。你能否两个都实现一遍?思路:https://blog.csdn.net/fx677588/article/details/723573891. 首先是迭代的反转链表方式如上图所示, 2. 利用递归代码:/** * Definition for singly-linked list. * public class ListNode { * ...原创 2018-03-29 12:14:17 · 3656 阅读 · 0 评论 -
lintcode:前序遍历和中序遍历树构造二叉树
根据前序遍历和中序遍历树构造二叉树.样例给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 / \1 3思路:前序: 2 1 4 5 3 6中序: 4 1 5 2 6 3首先根据前序的第一个元素可知 根节点为2, 然后在中序中寻找2, 然后在2之前的元素就可知是 左子树的元素,那么左子树的元素个数就知道了。 然后左右子树的 前序, 中序 都可知了,最后递归即可。...原创 2018-04-02 19:36:26 · 198 阅读 · 0 评论 -
lintcode:字符串置换 (Java)(数组模拟hashmap,字符的ASCII码)
题目:给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。置换的意思是,通过改变顺序可以使得两个字符串相等。样例"abc" 为 "cba" 的置换。"aabc" 不是 "abcc" 的置换。思路:一开始想A字符串判断一个,看看B中有没有,若B中有,删掉,迭代至A到末尾。但是这样做很麻烦,后来在网上看到了大神的做法,利用一个数组模拟hashmap的功能,其实这个方法上次也看到...原创 2018-04-09 11:00:59 · 197 阅读 · 0 评论 -
lintcode之快速幂
先来看看剑指offer里面的这道题:题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。pow(base, exponent)思路:初始思路:首先,对于exponent<0的情况下,可以先将 exponent取绝对值,然后在对结果取倒数,如果此时base为0,抛出异常。进阶思路:如果exponent=32,那么我们只需要知道e...原创 2018-04-09 09:32:28 · 153 阅读 · 0 评论 -
LeetCode91. 解码方法
包含 A-Z 的字母的消息通过以下规则编码:'A' -> 1'B' -> 2...'Z' -> 26给定一个包含数字的编码消息,请确定解码方法的总数。例如,给定消息为 "12", 它可以解码为 "AB"(1 2)或 "L"(12)。"12" 的解码方法为 2 种。思路:可以看作一个动态规划的问题,首先,如果第一位上是0,那么无法转码,返回0;其次,每次转码,都可以看看第i...原创 2018-03-30 20:52:31 · 3983 阅读 · 0 评论