- 博客(22)
- 收藏
- 关注
原创 矩阵的之字型遍历
给你一个包含 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
原创 克隆二叉树
/** * 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
原创 平面列表
给定一个列表,该列表中的每个要素要么是个列表,要么是整数。将其变成一个只包含整数的简单列表。样例给定 [1,2,[1,2]],返回 [1,2,1,2]。给定 [4,[3,[2,[1]]]],返回 [4,3,2,1]。【递归实现】/** * // This is the interface that allows for creating nested lists.
2016-10-28 09:43:30 476
原创 二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示)。样例a = 11b = 1返回 100public class Solution { /** * @param a a number * @param b a number * @return the result * 主要考虑进位 !!最后一位的进位
2016-10-27 09:27:31 212
原创 把排序数组转换为高度最小的二叉搜索树
给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。样例给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \1 3 5 7/** * Definition of TreeNode: * public class TreeNode { * p
2016-10-26 21:58:46 252
原创 子树
有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。 注意事项若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。样例下面的例子中 T2 是 T1 的子树: 1
2016-10-26 09:16:13 164
原创 在O(1)时间复杂度删除链表节点
给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。样例给定 1->2->3->4,和节点 3,删除 3 之后,链表应该变为 1->2->4。/** * Definition for ListNode. * public class ListNode { * int val; * L
2016-10-25 15:42:17 622
原创 二进制中有多少个1
计算在一个 32 位的整数的二进制表式中有多少个 1.样例给定 32 (100000),返回 1给定 5 (101),返回 2给定 1023 (111111111),返回 9!!!!!注意负数public class Solution { /** * @param num: an integer * @return: a
2016-10-25 11:17:58 574
原创 最长上升连续子序列
给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。) 注意事项time样例给定 [5, 4, 2, 1, 3], 其最长上升连续子序列(LICS)为 [5, 4, 2, 1], 返回 4.给定 [5, 1, 2, 3, 4], 其最长上升连续子
2016-10-25 10:04:51 227
原创 翻转一棵二叉树
样例 1 1 / \ / \2 3 => 3 2 / \ 4 4挑战 递归固然可行,能否写个非递归的?/** * Definition of TreeNode: * public class TreeNode { * public int val;
2016-10-24 17:33:21 366
原创 将二叉树拆成链表
将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。 注意事项不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出样例 1 \ 1 2 / \ \
2016-10-21 17:20:06 354
原创 两两交换链表中的节点
给一个链表,两两交换其中的节点,然后返回交换后的链表。样例给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNo
2016-10-21 15:23:47 2545
原创 栅栏染色
我们有一个栅栏,它有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
原创 左填充
实现一个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
原创 形状工厂
工厂模式是一种常见的设计模式。实现一个形状工厂 ShapeFactory来创建不同的形状类。这里我们假设只有三角形,正方形和矩形三种形状。样例ShapeFactory sf = new ShapeFactory();Shape shape = sf.getShape("Square");shape.draw();>> ---->> | |>> | |>> -
2016-10-20 11:18:38 403
原创 玩具工厂
工厂模式是一种常见的设计模式。请实现一个玩具工厂 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
原创 移动零
给一个数组 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
原创 单例
单例 是最为最常见的设计模式之一。对于任何时刻,如果某个类只存在且最多存在一个具体的实例,那么我们称这种设计模式为单例。例如,对于 class Mouse (不是动物的mouse哦),我们应将其设计为 singleton 模式。你的任务是设计一个 getInstance 方法,对于给定的类,每次调用 getInstance 时,都可得到同一个实例。 单例模式(Single
2016-10-20 10:08:28 564
原创 中位数
给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第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
原创 整数排序
给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。若从空间复杂度来考虑:首选堆排序,其次是快速排序,最后是归并排序。若从稳定性来考虑,应选取归并排序,因为堆排序和快速排序都是不稳定的。若从平均情况下的排序速度考虑,应该选择快速排序。 1.归并排序:分治法(Divide and Conquer)的一个非常典型的应用
2016-10-19 11:14:05 403
原创 两数组的交 II
样例nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].public class Lint548 { /** * @param nums1 an integer array * @param nums2 an integer array * @return an integer arr
2016-10-17 22:17:04 264
原创 冒泡/选择排序
冒泡:相邻元素两两比较,相比大的放在后面,第一次比较结束后最大值出现在数组最后选择:先找到数组中最小的放在第一个,之后从第二个开始继续比较后面的找到第二小的,以此类推。public class Solution { /** * @param A an integer array * @return void */ public v
2016-10-17 11:33:22 302
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人