剑指Offer
文章平均质量分 70
流云易采
硕士
展开
-
Singleton模式(Java)
《剑指Offer》P31/*************实现单键模式Singleton*************/public class Singleton{ /* 简单实现方式一,不适合在多线程环境下使用 */ public class Singleton1 { //创建instance实例 private static Singleton1 instance; //原创 2015-03-26 16:21:19 · 872 阅读 · 0 评论 -
程序员面试金典——递归问题汇总
一、简单动态规划问题1、机器人走方格I 类似的参见《斐波那契数列》 有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。给定两个正整数int x,int y,请返回机器人的走法数目。保证x+y小于等于12。 class Robot { // public i原创 2016-01-11 21:30:27 · 1351 阅读 · 0 评论 -
剑指Offer——斐波那契数列
斐波那契数列《剑指Offer》P73可用以实现青蛙跳台阶问题,线段问题等//较差的实现方式一,里面包涵了很多重复计算long long Fibonacci::Fibonacci_fun1(int n){ if (n <= 0) { return 0; } if (n == 1) { return 1; } return Fibonacci原创 2015-03-10 16:55:23 · 1069 阅读 · 0 评论 -
剑指Offer——链表中快行指针用法(链表中倒数第k个结点等)
问题一、链表中倒数第k个结点题目描述:输入一个链表,输出该链表中倒数第k个结点。问题分析:典型的链表快行指针法,设置两个指针,使前一个指针p1先走k步,然后两个指针p1,p2同时出发;当p1走到链表末尾的时候,p2所指的元素即是所要求的链表倒数第k个节点;代码:/*public class ListNode { int val; L原创 2015-11-06 20:30:51 · 1031 阅读 · 0 评论 -
数组中出现次数超过一半的数字
《剑指Offer》P163题目:找出数组中一个出现次数超过整个数组长度一般的数字 解法一:将原问题转化为求数组的中位数,采用快速排序的思想,每一次Partition取末位为哨兵,遍历将小于、大于哨兵的数分别移至哨兵左右,最后返回哨兵在处理后的数组中的位置。不断缩小要处理的数组的长度大小,最终确定返回值为数组长度一半的元素,即为中位数。 解法二:由原创 2015-03-17 09:15:58 · 1079 阅读 · 0 评论 -
剑指offer题21 包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。题目解析:题目的重点在于,每次调用min函数都可以pop出当前栈中的最小值;可以考虑使用一个辅助栈minStack,当每次push进来一个数值node时,minStack将当前栈顶值(默认当前最小值)与node进行比较,push捡来最小值;则在每个时刻,minStack中保存的都是当前栈中的最小值原创 2015-12-06 20:48:08 · 905 阅读 · 0 评论 -
leetcode-53 Maximum Subarray 连续子数组的最大和
问题描述:Find the contiguoussubarray within an array (containing at least one number) which has the largestsum.For example, given the array [−2,1,−3,4,−1,2,1,−5,4],the contiguous subarray [4,−1,2,1]原创 2015-11-27 20:48:52 · 1808 阅读 · 0 评论 -
剑指Offer 链表相关问题--从尾到头打印链表、合并两个排序的链表
面试题5:从尾到头打印链表题目描述:输入一个链表,从尾到头打印链表每个节点的值。题目解析:方法一:先遍历链表,将每个节点push进栈中,然后再依次弹出。即实现逆序输出方法二:通过递归的方式(但要考虑链表过长,递归层次过深的情况)方法三:反转链表,然后遍历输出(不建议采用)代码:方法一:/** * public class原创 2015-11-16 22:55:48 · 830 阅读 · 0 评论 -
leetcode-191 Number of 1 Bits 二进制数字中1的个数
问题描述:Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as theHamming weight).For example, the 32-bit integer ’11' has binary representation 00原创 2015-03-10 19:42:25 · 4550 阅读 · 0 评论 -
数字在数组中出现一次的情况
1.数字在数组中出现一次的情况(《剑指Offer》P211,《编程之美》P38)(1)问题描述:一个数组中,一个或两个数字只出现了一次,其他数字都出现了两次,找到这两个数字。(2)解决思路解法一:遍历列表,使用哈希表记录下每个数字出现的次数,每次遇见一个新的数字,则在哈希表中增加一个元素;遇见相同的数字,即该数字出现两次,则从哈希表中将该原创 2015-03-04 22:02:51 · 1002 阅读 · 0 评论 -
剑指Offer-题14:调整数组顺序使奇数位于偶数之前
一、基础版:问题描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分。问题分析:考虑使用双指针法;方法一:维护两个指针p1,p2,分别从数组的头部和尾部开始往中间走;当p1为奇数时,p1继续往前走;当p2为偶数时,p2也继续往中间走;当p1指向偶数,且p2指向奇数时,则将两个值进行交换;原创 2015-11-06 08:48:23 · 737 阅读 · 0 评论 -
leetcode-50 Pow(x, n) 剑指Offer题11 数值的整数次方
问题描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。Pow(X,n)问题分析:问题首先要考虑输入值的合法性,0的0次方可以返回1,可以视作是合法的;但0的负数次幂则是没有意义,因此需要单独挑出来;此外,double类型数据的比较最好采用相减不大于某个极小值(比如0.00000001)来表示相等,最好不要使用==;原创 2015-11-04 22:51:31 · 1507 阅读 · 0 评论 -
从无头单链表中删除节点
1、从无头单链表中删除节点一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个也不是最后一个节点)。将该节点删除。A——>B——>C——>D =====》 A——>C——>D问题解析:由于只能单向遍历,故与删除B节点,无法得知B的前驱A,即无法像普通删除中那样让A的next指向C;这里有个技巧,将C当做B,而B复制成C,则删除C节点即可原创 2015-06-13 16:24:02 · 1475 阅读 · 0 评论 -
剑指Offer——反转单词顺序(Java)
问题描述:输入一个英文句子,反转句子中的单词的顺序,但单词内字符的顺序不变;(为简单起见,标点符号与普通字符当做一样处理)示例 :输入:“I am a student.” 输出: “.student a am I”策略 :策略是先反转整个字符串,在根据空格划分单词,然后依次反转每个单词代码 :public clas原创 2015-06-19 17:13:05 · 4457 阅读 · 0 评论 -
剑指Offer-题16 反转链表(Java)
问题描述:定义一个函数,输入一个链表的头结点,反转该链表并输出翻转后链表的头结点;问题分析:为避免反转时,当前节点的next指针指向前驱lastNode,而无法继续索引其后继nextNode,故在遍历过程中,注意要同时记录其前驱与后继;同时注意鲁棒性:如输入链表头指针为null或者只有一个节点的情况;代码:/*public class ListNode {原创 2015-04-13 16:15:48 · 842 阅读 · 0 评论 -
剑指Offer 二叉树相关问题
0、二叉树的三种遍历方式http://blog.csdn.net/woliuyunyicai/article/details/444585811、重建二叉树题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,原创 2015-12-14 19:49:16 · 1318 阅读 · 3 评论