LintCode笔记
普通网友
这个作者很懒,什么都没留下…
展开
-
22.Flatten List-平面列表(容易题)
平面列表 题目给定一个列表,该列表中的每个要素要么是个列表,要么是整数。将其变成一个只包含整数的简单列表。注意事项如果给定的列表中的要素本身也是一个列表,那么它也可以包含列表。样例给定 [1,2,[1,2]],返回 [1,2,1,2]。 给定 [4,[3,[2,[1]]]],返回 [4,3,2,1]。挑战请用非递归方法尝试解答这道题。题解1.递归解法/** * // This is原创 2016-08-27 20:35:11 · 1124 阅读 · 0 评论 -
50.Product of Array Exclude Itself-数组剔除元素后的乘积(容易题)
数组剔除元素后的乘积 题目给定一个整数数组A。定义B[i] = A[0] * … * A[i-1] * A[i+1] * … * A[n-1], 计算B的时候请不要使用除法。样例给出A=[1, 2, 3],返回 B为[6, 3, 2]题解1.暴力解法 public class Solution { /** * @param A: Given an integers arra原创 2016-08-28 12:49:24 · 348 阅读 · 0 评论 -
53.Reverse Words in a String-翻转字符串(容易题)
翻转字符串 题目给定一个字符串,逐个翻转字符串中的每个单词。说明单词的构成:无空格字母构成一个单词 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个样例给出s = “the sky is blue”,返回”blue is sky the”题解1.先拆分成单词列表,再反转单词列表,最后组成反转后的字符原创 2016-08-28 20:12:47 · 437 阅读 · 0 评论 -
55.Compare Strings-比较字符串(容易题)
比较字符串 题目比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母注意事项在 A 中出现的 B 字符串里的字符不需要连续或者有序。样例给出 A = “ABCD” B = “ACD”,返回 true给出 A = “ABCD” B = “AABC”, 返回 false题解1.最简单的暴力解法就不解释了。 public class Solution {原创 2016-08-28 23:07:33 · 466 阅读 · 0 评论 -
60.Search Insert Position-搜索插入位置(容易题)
搜索插入位置 题目给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。你可以假设在数组中无重复元素。样例[1,3,5,6],5 → 2[1,3,5,6],2 → 1[1,3,5,6], 7 → 4[1,3,5,6],0 → 0题解1.简单遍历即可。 public class Solution { /** * param原创 2016-08-28 23:27:59 · 332 阅读 · 0 评论 -
173.Insertion Sort List-链表插入排序(容易题)
链表插入排序 题目用插入排序对链表排序样例Given 1->3->2->0->null, return 0->1->2->3->null题解/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { *原创 2016-09-08 23:04:55 · 496 阅读 · 0 评论 -
174.Remove Nth Node From End of List-删除链表中倒数第n个节点(容易题)
删除链表中倒数第n个节点 题目给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。注意事项 链表中的节点个数大于等于n样例给出链表1->2->3->4->5->null和 n = 2. 删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.挑战O(n)时间复杂度题解思路与链表倒数第n个节点 一致,找到倒数第n+1个节点,然后删除其下一个节点即可。本题需要注意的是原创 2016-09-08 23:08:46 · 228 阅读 · 0 评论 -
175.Invert Binary Tree-翻转二叉树(容易题)
翻转二叉树 题目翻转一棵二叉树样例挑战递归固然可行,能否写个非递归的?题解1.递归法/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { *原创 2016-09-08 23:24:47 · 284 阅读 · 0 评论 -
64.Merge Sorted Array II-合并排序数组 II(容易题)
合并排序数组 II 题目合并两个排序的整数数组A和B变成一个新的数组。注意事项你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。样例给出 A = [1, 2, 3, empty, empty], B = [4, 5]合并之后 A 将变成 [1,2,3,4,5]题解将A、B两个数组从后向前进行比较,按大小依次添加到数组A[m+n]的尾部,最后将A或者B中还剩余的数全部添原创 2016-08-29 12:46:40 · 385 阅读 · 0 评论 -
181.Flip Bits-将整数A转换为B(容易题)
将整数A转换为B 题目如果要将整数A转换为B,需要改变多少个bit位?样例如把31转换为14,需要改变2个bit位。 (31)10=(11111)2 (14)10=(01110)2挑战你能想出几种方法?题解本题优先考虑的就是二进制运算,由题意自然想到的就是异或运算。以样例为例:11111^01110=10001,则10001中为1的bit位的个数就是答案。 但是这里有个坑要注意,就是处原创 2016-09-09 13:07:24 · 607 阅读 · 0 评论 -
185.Matrix Zigzag Traversal-矩阵的之字型遍历(容易题)
矩阵的之字型遍历 题目给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历。样例对于如下矩阵: 返回 [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12]题解public class Solution { /** * @param matrix: a matrix of integers * @ret原创 2016-09-09 15:05:34 · 293 阅读 · 0 评论 -
67.Binary Tree Inorder Traversal-二叉树的中序遍历(容易题)
二叉树的中序遍历 题目给出一棵二叉树,返回其中序遍历样例给出二叉树 {1,#,2,3},1 \ 2 / 3 返回 [1,3,2].题解1.递归法/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; *原创 2016-08-29 15:30:08 · 504 阅读 · 0 评论 -
68.Binary Tree Postorder Traversal-二叉树的后序遍历(容易题)
二叉树的后序遍历 题目给出一棵二叉树,返回其节点值的后序遍历。样例给出一棵二叉树 {1,#,2,3},1 \ 2 / 3 返回 [3,2,1]挑战你能使用非递归实现么?题解1.递归法/** * Definition of TreeNode: * public class TreeNode { * public int val; * public Tree原创 2016-08-30 09:26:49 · 616 阅读 · 0 评论 -
366.Fibonacci-斐波纳契数列(入门题)
斐波纳契数列 题目查找斐波纳契数列中第 N 个数。所谓的斐波纳契数列是指:前2个数是 0 和 1 。 第 i 个数是第 i-1 个数和第i-2 个数的和。 斐波纳契数列的前10个数字是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34 …答案class Solution { /** * @param n: an integer * @return a原创 2016-08-10 16:06:38 · 433 阅读 · 0 评论 -
452.Remove Linked List Elements-删除链表中的元素(入门题)
删除链表中的元素 题目删除链表中等于给定值val的所有节点。样例给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。题解遍历删除即可,为处理方便加了一个头结点。T(n)=O(n),S(n)=O(1)public class Solution { public ListNode removeElements(List原创 2016-08-11 10:45:02 · 402 阅读 · 0 评论 -
463.Sort Integers-整数排序(入门题)
删除链表中的元素 题目删除链表中等于给定值val的所有节点。样例给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。题解1、冒泡法public class Solution { /** * @param A an integer array * @return void */原创 2016-08-11 15:29:42 · 382 阅读 · 0 评论 -
464.Sort Integers II-整数排序II(容易题)
整数排序 II 题目给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。样例给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。题解1、归并排序public class Solution { /** * @param A an integer array原创 2016-08-11 23:38:46 · 519 阅读 · 0 评论 -
1.A + B Problem-A + B 问题(容易题)
A + B 问题 题目给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。说明a和b都是 32位 整数么?是的我可以使用位运算符么?当然可以样例如果 a=1 并且 b=2,返回3题解本题的本质就是实现二进制加法运算的过程,具体思路如下: 如a=7(0111),b=13(1101)首先忽略进位,将二进制各位数字相加,即使用^运算得到1010。再从最低位开始记录进位数,进位操作原创 2016-08-12 11:25:19 · 356 阅读 · 0 评论 -
2.Trailing Zeros-尾部的零(容易题)
尾部的零 题目设计一个算法,计算出n阶乘中尾部零的个数样例11! = 39916800,因此应该返回 2挑战O(logN)的时间复杂度题解先把n除以5获取可以被5整除个数,然后再次除以5获取可以再次被5整除的个数,如此迭代处理直至没有可以被5整除的数。 如11/5 = 2,再将2/5=0,2+0=2即时答案。class Solution { /* * param n:原创 2016-08-12 12:27:00 · 407 阅读 · 0 评论 -
6.Merge Two Sorted Arrays-合并排序数组(容易题)
合并排序数组 题目合并两个排序的整数数组A和B变成一个新的数组。样例给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]挑战你能否优化你的算法,如果其中一个数组很大而另一个数组很小?题解双指针法,从后往前依次往新数组中添加两个指针指向的较大的数字。class Solution { /** * @param A and B: sort原创 2016-08-15 11:20:39 · 540 阅读 · 0 评论 -
8.Rotate String-旋转字符串(容易题)
旋转字符串 题目给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)样例对于字符串 “abcdefg”.offset=0 => “abcdefg” offset=1 => “gabcdef” offset=2 => “fgabcde” offset=3 => “efgabcd”挑战在数组上原地旋转,使用O(1)的额外空间题解先前一部分逆序,再把后一部分逆序,最后整体逆序,原创 2016-08-15 17:19:56 · 408 阅读 · 0 评论 -
9.Fizz Buzz-Fizz Buzz 问题(容易题)
Fizz Buzz 问题 题目给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:如果这个数被3整除,打印fizz. 如果这个数被5整除,打印buzz. 如果这个数能同时被3和5整除,打印fizz buzz.样例比如 n = 15, 返回一个字符串数组:[ “1”, “2”, “fizz”, “4”, “buzz”, “fizz”, “7”, “8”, “fizz”, “bu原创 2016-08-15 17:24:52 · 631 阅读 · 0 评论 -
13.strStr-字符串查找(容易题)
字符串查找 题目对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。说明在面试中我是否需要实现KMP算法?不需要,当这种问题出现在面试中时,面试官很可能只是想要测试一下你的基础应用能力。当然你需要先跟面试官确认清楚要怎么实现这个题。样例如果 source = “sou原创 2016-08-15 23:02:03 · 650 阅读 · 0 评论 -
14.First Position of Target-二分查找(容易题)
二分查找 题目给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。样例在数组 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2。挑战如果数组中的整数个数超过了2^32,你的算法是否会出错?题解class Solution { /**原创 2016-08-16 10:10:59 · 459 阅读 · 0 评论 -
28.Search a 2D Matrix-搜索二维矩阵(容易题)
搜索二维矩阵 题目写出一个高效的算法来搜索 m × n矩阵中的值。这个矩阵具有以下特性:每行中的整数从左到右是排序的。 每行的第一个数大于上一行的最后一个整数。样例考虑下列矩阵:[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] 给出 target = 3,返回 true挑战O(log(n) + log(m)) 时间复杂度题解原创 2016-08-16 13:43:54 · 316 阅读 · 0 评论 -
82.Single Number-落单的数(容易题)
落单的数 题目给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。样例给出 [1,2,2,1,3,4,3],返回 4挑战一次遍历,常数级的额外空间复杂度题解基本的异或操作应用。public class Solution { /** *@param A : an integer array *return : a integer原创 2016-08-31 11:22:09 · 478 阅读 · 0 评论 -
80.Median-中位数(容易题)
中位数 题目给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。样例给出数组[4, 5, 1, 2, 3], 返回 3给出数组[7, 9, 4, 5],返回 5挑战时间复杂度为O(n)题解1.Hashmap法,以空间换时间,时间复杂度为O(n) 先通过一次遍历得到最大值和最小值,并把元素值作为Hashmap的K、原创 2016-08-31 10:43:52 · 490 阅读 · 0 评论 -
66.Binary Tree Preorder Traversal-二叉树的前序遍历(容易题)
二叉树的前序遍历 题目给出一棵二叉树,返回其节点值的前序遍历。样例给出一棵二叉树 {1,#,2,3},1 \ 2 / 3 返回 [1,2,3].挑战你能使用非递归实现么?题解1.递归法/** * Definition of TreeNode: * public class TreeNode { * public int val; *原创 2016-08-29 12:51:25 · 344 阅读 · 0 评论 -
197.Permutation Index-排列序号(容易题)
排列序号 题目给出一个不含重复数字的排列,求这些数字的所有排列按字典序排序后该排列的编号。其中,编号从1开始。样例例如,排列 [1,2,4] 是第 1 个排列。题解public class Solution { /** * @param A an integer array * @return a long integer */原创 2016-09-09 15:20:40 · 504 阅读 · 0 评论 -
204.Singleton-单例(容易题)
单例 题目单例 是最为最常见的设计模式之一。对于任何时刻,如果某个类只存在且最多存在一个具体的实例,那么我们称这种设计模式为单例。例如,对于 class Mouse (不是动物的mouse哦),我们应将其设计为 singleton 模式。你的任务是设计一个 getInstance 方法,对于给定的类,每次调用 getInstance 时,都可得到同一个实例。样例在 Java 中:A a = A.原创 2016-09-13 10:11:37 · 318 阅读 · 0 评论 -
212.Space Replacement-空格替换(容易题)
空格替换 题目设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。你的程序还需要返回被替换后的字符串的长度。注意事项 如果使用 Java 或 Python, 程序中请用字符数组表示字符串。样例对于字符串”Mr John Smith”, 长度为 13 替换空格之后,参数中的字符串需要变为”Mr%20John%20原创 2016-09-13 10:48:27 · 494 阅读 · 0 评论 -
227.Mock Hanoi Tower by Stacks-用栈模拟汉诺塔问题(容易题)
用栈模拟汉诺塔问题 题目在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子。要求盘子必须按照从小到大的顺序从上往下堆 (如,任意一个盘子,其必须堆在比它大的盘子上面)。同时,你必须满足以下限制条件:(1) 每次只能移动一个盘子。 (2) 每个盘子从堆的顶部被移动后,只能置放于下一个堆中。 (3) 每个盘子只能放在比它大的盘子上面。请写一段程序,实现将第原创 2016-09-13 10:50:29 · 2134 阅读 · 0 评论 -
245.Subtree-子树(容易题)
子树 题目有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。注意事项 若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。样例下面的例子中 T2 是 T1 的子树: 下面的例子中 T2 不是 T1 的子树:原创 2016-09-13 12:14:59 · 391 阅读 · 0 评论 -
365.Count 1 in Binary-二进制中有多少个1(容易题)
二进制中有多少个1 题目计算在一个 32 位的整数的二进制表式中有多少个 1.样例给定 32 (100000),返回 1 给定 5 (101),返回 2 给定 1023 (111111111),返回 9题解方法见 181.Flip Bits-将整数A转换为B。public class Solution { /** * @param num: an integer原创 2016-09-13 16:45:26 · 380 阅读 · 0 评论 -
372.Delete Node in the Middle of Singly Linked List-在O(1)时间复杂度删除链表节点(容易题)
在O(1)时间复杂度删除链表节点 题目给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。样例给定 1->2->3->4,和节点 3,删除 3 之后,链表应该变为 1->2->4。题解如本题样例所示,需删除节点3,则先将3的val变成后继节点4的val,再删除节点4即可。/** * Definition for ListNode. * publ原创 2016-09-13 16:48:03 · 281 阅读 · 0 评论 -
373.Partition Array by Odd and Even-奇偶分割数组(容易题)
奇偶分割数组 题目分割一个整数数组,使得奇数在前偶数在后。样例给定 [1, 2, 3, 4],返回 [1, 3, 2, 4]。挑战在原数组中完成,不使用额外空间。题解首尾双指针遍历,start指针查找偶数,end指针查找奇数,然后进行交换。public class Solution { /** * @param nums: an array of integers原创 2016-09-13 16:59:16 · 376 阅读 · 0 评论 -
375.Clone Binary Tree-克隆二叉树(容易题)
克隆二叉树 题目深度复制一个二叉树。 给定一个二叉树,返回一个他的 克隆品 。样例给定一个二叉树: 返回其相同结构相同数值的克隆二叉树: 题解/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; *原创 2016-09-13 17:09:35 · 834 阅读 · 0 评论 -
85.Insert Node in a Binary Search Tree-在二叉查找树中插入节点(容易题)
在二叉查找树中插入节点 题目给定一棵二叉查找树和一个新的树节点,将节点插入到树中。你需要保证该树仍然是一棵二叉查找树。样例给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的:挑战能否不使用递归?题解二叉查找树中任意节点的键值都大于它左子树中任意节点的键值,都小于它右子树中任意节点的键值,且不含有相同键值的节点。1.递归法/** * Definition of TreeNo原创 2016-09-01 23:10:43 · 414 阅读 · 0 评论 -
389.Valid Sudoku-判断数独是否合法(容易题)
判断数独是否合法 题目请判定一个数独是否有效。 该数独可能只填充了部分数字,其中缺少的数字用 . 表示。注意事项 一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。说明什么是 数独? http://sudoku.com.au/TheRules.aspx http://baike.baidu.com/subview/961/10842669.htm样例下列就是一原创 2016-09-13 23:00:33 · 531 阅读 · 0 评论 -
397.Longest Increasing Continuous Subsequence-最长上升连续子序列(容易题)
最长上升连续子序列 题目给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)注意事项 time样例给定 [5, 4, 2, 1, 3], 其最长上升连续子序列(LICS)为 [5, 4, 2, 1], 返回 4. 给定 [5, 1, 2, 3, 4], 其最长上升连续子序列(LIC原创 2016-09-14 00:23:40 · 267 阅读 · 0 评论