lintcode 记录-easy
文章平均质量分 61
chriscute
这个作者很懒,什么都没留下…
展开
-
不同的路径
有一个机器人的位于一个M×N个网格左上角(下图中标记为'Start')。机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为'Finish')。问有多少条不同的路径?样例1,11,21,31,41,51,61,72,1原创 2016-11-08 16:31:01 · 173 阅读 · 0 评论 -
单例
单例 是最为最常见的设计模式之一。对于任何时刻,如果某个类只存在且最多存在一个具体的实例,那么我们称这种设计模式为单例。例如,对于 class Mouse (不是动物的mouse哦),我们应将其设计为 singleton 模式。你的任务是设计一个 getInstance 方法,对于给定的类,每次调用 getInstance 时,都可得到同一个实例。 单例模式(Single原创 2016-10-20 10:08:28 · 564 阅读 · 0 评论 -
移动零
给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序 注意事项1.必须在原数组上操作2.最小化操作数给出 nums = [0, 1, 0, 3, 12], 调用函数之后, nums =[1, 3, 12, 0, 0].public class Solution { /** * @param原创 2016-10-20 11:12:16 · 245 阅读 · 0 评论 -
玩具工厂
工厂模式是一种常见的设计模式。请实现一个玩具工厂 ToyFactory 用来产生不同的玩具类。可以假设只有猫和狗两种玩具。样例ToyFactory tf = ToyFactory();Toy toy = tf.getToy('Dog');toy.talk(); >> Wowtoy = tf.getToy('Cat');toy.talk();>> Meow/原创 2016-10-20 11:13:07 · 486 阅读 · 0 评论 -
形状工厂
工厂模式是一种常见的设计模式。实现一个形状工厂 ShapeFactory来创建不同的形状类。这里我们假设只有三角形,正方形和矩形三种形状。样例ShapeFactory sf = new ShapeFactory();Shape shape = sf.getShape("Square");shape.draw();>> ---->> | |>> | |>> -原创 2016-10-20 11:18:38 · 403 阅读 · 0 评论 -
左填充
实现一个leftpad库,如果不知道什么是leftpad可以看样例样例leftpad("foo", 5)>> " foo"leftpad("foobar", 6)>> "foobar"leftpad("1", 2, "0")>> "01"String对象是不可改变的。每次使用 System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这原创 2016-10-20 14:52:04 · 269 阅读 · 0 评论 -
栅栏染色
我们有一个栅栏,它有n个柱子,现在要给柱子染色,有k种颜色可以染。必须保证任意两个相邻的柱子颜色不同【应改为最多有两个相邻柱子颜色相同】,求有多少种染色方案。样例n = 3, k = 2, return 6 post 1, post 2, post 3way1 0 0 1 way2 0 1原创 2016-10-20 16:33:09 · 521 阅读 · 0 评论 -
搜索二维矩阵
写出一个高效的算法来搜索 m × n矩阵中的值。这个矩阵具有以下特性:每行中的整数从左到右是排序的。每行的第一个数大于上一行的最后一个整数。考虑下列矩阵:[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]给出 target = 3,返回 truepublic class So原创 2016-11-28 18:10:03 · 222 阅读 · 0 评论 -
二分查找
给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。样例在数组 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2。class Solution { /** * @param nums: The integer arra原创 2016-11-28 19:49:55 · 197 阅读 · 0 评论 -
字符串查找
TIPS:1.string=null 和 string=""String s ;该语句表示只是声明了一个引用变量,但是并没有初始化引用,所以对变量s的任何操作(除了初始化赋值外) 都将引发异常. String s=null; 表示未申请任何内存资源,即些语句表示声明了一个引用变量并初始化引用,但是该引用没有指向任何对象.但可以把它作为参数传递或其它使用,但是不能调用它作为对象的方法原创 2016-11-29 10:11:53 · 517 阅读 · 0 评论 -
中位数
给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。PS:用快排,时间复杂度为O(n)public class Solution { /** * @param nums: A list of integers. * @return: An integer denotes原创 2016-10-19 15:31:17 · 240 阅读 · 0 评论 -
平衡二叉树
给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 样例给出二叉树 A={3,9,20,#,#,15,7}, B={3,#,20,15,7}A) 3 B) 3 / \ \ 9 20 20原创 2016-11-09 17:17:23 · 183 阅读 · 0 评论 -
删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素每个元素只留下一个。样例给出 1->1->2->null,返回 1->2->null给出 1->1->2->3->3->null,返回 1->2->3->null/** * Definition for ListNode * public class ListNode { * int val; * List原创 2016-11-08 21:51:30 · 572 阅读 · 0 评论 -
爬楼梯
假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?样例比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法返回 3public class Solution { /** * @param n: An integer * @return: An integer */原创 2016-11-08 22:12:48 · 192 阅读 · 0 评论 -
最小路径和
给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。 注意事项你在同一时间只能向下或者向右移动一步【动态规划】public class Solution { /** * @param grid: a list of lists of integers. * @retur原创 2016-11-09 10:03:42 · 207 阅读 · 0 评论 -
克隆二叉树
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this原创 2016-10-28 10:48:33 · 154 阅读 · 0 评论 -
数字三角形
给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。 注意事项如果你只用额外空间复杂度O(n)的条件下完成可以获得加分,其中n是数字三角形的总行数。样例比如,给出下列数字三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]从顶到底部的最小路径和为11原创 2016-11-09 10:39:36 · 292 阅读 · 0 评论 -
矩阵的之字型遍历
给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历。样例对于如下矩阵:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10, 11, 12]]返回 [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12][1,// 2, 5,// 9, 6, 3,// 4, 7原创 2016-10-28 17:31:46 · 387 阅读 · 0 评论 -
二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3./** * Definition of TreeNode: * public class TreeNode { * public int val;原创 2016-11-09 15:04:26 · 160 阅读 · 0 评论 -
链表划分
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。样例给定链表 1->4->3->2->5->2->null,并且 x=3返回 1->2->2->4->3->5->null/** * Definition for ListNode. * public class ListNode {原创 2016-11-09 15:23:34 · 135 阅读 · 0 评论 -
落单的数
给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。【异或运算】样例给出 [1,2,2,1,3,4,3],返回 4public class Solution { /** *@param A : an integer array *return : a integer */ publ原创 2016-11-09 15:36:11 · 343 阅读 · 0 评论 -
合并排序数组
合并两个排序的整数数组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: sorted integer arra原创 2016-11-29 10:37:30 · 274 阅读 · 0 评论 -
删除链表中倒数第n个节点
给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。样例给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.挑战 O(n)时间复杂度 【最多只能遍历一遍链表】/** * Definition for ListNode. * public class L原创 2016-11-01 11:31:57 · 319 阅读 · 0 评论 -
合并两个排序链表
将两个排序链表合并为一个新的排序链表样例给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; *原创 2016-11-02 16:21:11 · 211 阅读 · 0 评论 -
比较字符串
比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母 注意事项在 A 中出现的 B 字符串里的字符不需要连续或者有序。样例给出 A = "ABCD" B = "ACD",返回 true给出 A = "ABCD" B = "AABC", 返回 falsepublic class Sol原创 2016-11-22 09:58:42 · 284 阅读 · 0 评论 -
数组剔除元素后的乘积
给定一个整数数组A。定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法。【学习的好方法!!!!】 public ArrayList productExcludeItself(ArrayList A) { // write your code ArrayLi原创 2016-11-22 14:53:38 · 175 阅读 · 0 评论 -
在二叉查找树中插入节点
给定一棵二叉查找树和一个新的树节点,将节点插入到树中。你需要保证该树仍然是一棵二叉查找树。样例给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2 2 / \ / \1 4 --> 1 4 / / \ 3 3 6原创 2016-11-22 17:05:19 · 264 阅读 · 0 评论 -
主元素
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。样例给出数组[1,1,1,1,2,2,2],返回 1挑战 要求时间复杂度为O(n),空间复杂度为O(1)public class Solution { /** * @param nums: a list of integers原创 2016-11-22 17:58:41 · 494 阅读 · 0 评论 -
最小/大子数组
给定一个整数数组,找到一个具有最小/大和的子数组。返回其最小/大和。public class Solution { /** * @param nums: a list of integers * @return: A integer indicate the sum of minimum subarray */ public int mi原创 2016-11-23 10:18:47 · 160 阅读 · 0 评论 -
丑数I II
写一个程序来检测一个整数是不是丑数。丑数的定义是,只包含质因子 2, 3, 5 的正整数。比如 6, 8 就是丑数,但是 14 不是丑数以为他包含了质因子 7可以认为 1 是一个特殊的丑数。public class Solution { /** * @param num an integer * @return true if num原创 2016-06-17 10:55:29 · 383 阅读 · 0 评论 -
恢复旋转排序数组
给定一个旋转排序数组,在原地恢复其排序。什么是旋转数组?比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]样例[4, 5, 1, 2, 3] -> [1, 2, 3, 4, 5]public class Solution { /**原创 2016-11-24 10:07:18 · 261 阅读 · 0 评论 -
翻转链表
样例给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val原创 2016-11-28 15:20:00 · 181 阅读 · 0 评论 -
搜索插入位置
给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。你可以假设在数组中无重复元素。如果找不到该数,high是比该数小的那个数的下标,而low是比该数大的那个数的下标。public class Solution { /** * param A : an integer sorted arra原创 2016-11-22 09:14:45 · 278 阅读 · 0 评论 -
合并排序数组 II
合并两个排序的整数数组A和B变成一个新的数组。 注意事项你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。class Solution { /** * @param A: sorted integer array A which has m elements, * but size of A原创 2016-11-21 16:15:28 · 294 阅读 · 0 评论 -
链表插入排序
【插入排序】基本思想在插入第i个数时,前i-1个数的顺序已经是排好的。只需将第i个数与前i-1个依次比较找到合适的插入位置即可。样例Given 1->3->2->0->null, return 0->1->2->3->null/** * Definition for ListNode. * public class ListNode {原创 2016-11-01 18:51:28 · 196 阅读 · 0 评论 -
删除元素
给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。元素的顺序可以改变,并且对新的数组不会有影响。样例给出一个数组 [0,4,4,0,0,2,4,4],和值 4返回 4 并且4个元素的新数组为[0,0,0,2]public class Solution { /** *@param A: A list of integers原创 2016-11-01 19:35:20 · 263 阅读 · 0 评论 -
旋转字符串
给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)样例对于字符串 "abcdefg".offset=0 => "abcdefg"offset=1 => "gabcdef"offset=2 => "fgabcde"offset=3 => "efgabcd"public class Solution { /** * @原创 2016-11-29 15:21:15 · 196 阅读 · 0 评论 -
Fizz Buzz 问题
给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:如果这个数被3整除,打印fizz.如果这个数被5整除,打印buzz.如果这个数能同时被3和5整除,打印fizz buzz.样例比如 n = 15, 返回一个字符串数组:[ "1", "2", "fizz", "4", "buzz", "fizz", "7", "8",原创 2016-11-29 15:38:25 · 397 阅读 · 0 评论 -
用栈模拟汉诺塔问题
在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子。要求盘子必须按照从小到大的顺序从上往下堆 (如,任意一个盘子,其必须堆在比它大的盘子上面)。同时,你必须满足以下限制条件:(1) 每次只能移动一个盘子。(2) 每个盘子从堆的顶部被移动后,只能置放于下一个堆中。(3) 每个盘子只能放在比它大的盘子上面。请写一段程序,实现将第一个堆的盘子移动到最后一个原创 2016-11-29 20:19:30 · 1818 阅读 · 2 评论 -
链表求和
你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。样例给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null/** * Definition for singly-linked list. * public原创 2016-11-02 10:49:44 · 266 阅读 · 0 评论