剑指offer
文章平均质量分 68
gzvincentlee
这个作者很懒,什么都没留下…
展开
-
用栈实现队列
正如标题所述,你需要使用两个栈来实现队列的一些操作。队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。pop和top方法都应该返回第一个元素的值。public class Solution { private Stack stack1; private Stack stack2;原创 2015-10-03 22:27:07 · 346 阅读 · 0 评论 -
主元素
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。方法1:使用hashmap来存储数组中的元素及对应的次数。空间复杂度较高。public class Solution { /** * @param nums: a list of integers * @return: find a majority number */原创 2015-10-07 11:48:38 · 507 阅读 · 0 评论 -
带最小值操作的栈
实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。public class Solution { private Stack stack; private Stack minStack; public Solution() { //原创 2015-10-06 20:41:13 · 348 阅读 · 0 评论 -
合并两个排序链表
将两个排序链表合并为一个新的排序链表样例给出 1->3->8->11->15->null,2->null, 返回1->2->3->8->11->15->null。解法1:public class Solution { /** * @param ListNode l1 is the head of the linked list * @pa原创 2015-10-06 12:34:09 · 305 阅读 · 0 评论 -
最大子数组
给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。样例给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6//先使用动态规划维护一个符合连续数组条件的每个位置的值的数组。然后遍历该数组,找出其中最大的值。public class Solution { /** * @param nums:原创 2015-10-07 13:04:12 · 335 阅读 · 0 评论 -
二叉树的层次遍历
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.va原创 2015-10-06 21:00:26 · 300 阅读 · 0 评论 -
子树判断
有两个不同大小的二进制树: T1 有上百万的节点; T2有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。public class Solution { /** * @param T1, T2: The roots of binary tree. * @return: True if T2 is a subtree of T1, or false.原创 2015-10-06 18:13:43 · 359 阅读 · 0 评论 -
删除链表中倒数第n个节点
删除链表中倒数第n个节点给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。样例:给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null./** * Definition for ListNode. * public class ListNode { * int val;原创 2015-10-06 12:06:31 · 330 阅读 · 0 评论 -
奇偶分割数组
分割一个整数数组,使得奇数在前偶数在后。样例给定 [1, 2, 3, 4],返回 [1, 3, 2, 4]。public class Solution { /** * @param nums: an array of integers * @return: nothing */ public void partitionArra原创 2015-10-06 11:36:52 · 341 阅读 · 0 评论 -
搜索二维矩阵 II
写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数。这个矩阵具有以下特性:每行中的整数从左到右是排序的。每一列的整数从上到下是排序的。在每一行或每一列中没有重复的整数。public class Solution { /** * @param matrix: A list of lists of integers * @pa原创 2015-10-03 22:36:21 · 1292 阅读 · 0 评论 -
斐波纳契数列
查找斐波纳契数列中第 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 i原创 2015-10-03 20:47:05 · 440 阅读 · 0 评论 -
翻转链表
public class Solution { /** * @param head: The head of linked list. * @return: The new head of reversed linked list. */ public ListNode reverse(ListNode head) { // write原创 2015-10-03 21:21:37 · 286 阅读 · 0 评论 -
寻找旋转排序数组中的最小值
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。你需要找到其中最小的元素。你可以假设数组中不存在重复的元素。public class Solution { /** * @param num: a rotated sorted array * @return: the minimum原创 2015-10-03 21:32:40 · 427 阅读 · 0 评论 -
单例Singleton
//恶汉式,可以在多线程环境下使用。但是会过早地创建实例,从而减低内存的使用效率class Solution { /** * @return: The same instance of this class every time */ private Solution(){}; public static Solution instance = ne原创 2015-10-03 21:04:18 · 343 阅读 · 0 评论 -
二进制中有多少个1
两种解法如下://第一种解法,public class Solution { /** * @param num: an integer * @return: an integer, the number of ones in num */ public int countOnes(int num) { // writ原创 2015-10-03 20:11:50 · 395 阅读 · 0 评论 -
前序遍历和中序遍历树构造二叉树 && 中序遍历和后序遍历树构造二叉树
public class Solution { /** *@param preorder : A list of integers that preorder traversal of a tree *@param inorder : A list of integers that inorder traversal of a tree *@return :原创 2015-10-03 21:53:58 · 379 阅读 · 0 评论 -
空格替换
设计一种方法,将一个字符串中的所有空格替换成 %20。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。public class Solution { /** * @param string: An array of Char * @param length: The true length of the string * @r原创 2015-10-03 20:41:43 · 317 阅读 · 0 评论 -
二叉树遍历
前序遍历:非递归解法public class Solution { /** * @param root: The root of binary tree. * @return: Preorder in ArrayList which contains node values. */ public ArrayList preorderTraversa原创 2015-10-06 21:33:24 · 303 阅读 · 0 评论