剑指Offer
weixin_38437243
这个作者很懒,什么都没留下…
展开
-
剑指offer之八---变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法时间限制:1秒空间限制:32768K思路一:比较笨:链接:https://www.nowcoder.com/questionTerminal/22243d016f6b47f2a6928b4313c85387来源:牛客网f(1) = 1 f(转载 2017-09-23 16:54:45 · 272 阅读 · 0 评论 -
剑指offer之十八---顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 1213 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10./*解题思路:顺时针打印就是按圈数循环打印,一圈包含两行或者两列,转载 2017-10-07 22:59:11 · 164 阅读 · 0 评论 -
剑指offer之十九---从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:就是二叉树的层次遍历么,借助一个队列就可以了public static ArrayList PrintFromTopToBottom(TreeNode root) { ArrayList list = new ArrayList<>(); if (root == null) return转载 2017-10-07 23:56:42 · 141 阅读 · 0 评论 -
剑指offer之六---菲波那切数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n时间限制:1秒空间限制:32768K思路:方法一:第一次我是看nif(n == 0) return 0; if(n 0) return 1; else return Fibonacci(n - 1) + Fibonacci(n - 2);时转载 2017-09-21 09:39:48 · 229 阅读 · 0 评论 -
剑指offer之二十---二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:已知条件:后序序列最后一个值为root;二叉搜索树左子树值都比root小,右子树值都比root大。1、确定root;2、遍历序列(除去root结点),找到第一个大于root的位置,则该位置左边为左子树,右转载 2017-10-08 16:53:25 · 174 阅读 · 0 评论 -
剑指offer之十五---合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。链接:https://www.nowcoder.com/questionTerminal/d8b6b4358f774294a89de2a6ac4d9337来源:牛客网 /** * 算法思想:构造两个指针分别指向两个链表转载 2017-09-29 22:41:04 · 183 阅读 · 0 评论 -
剑指offer之十四---反转链表
题目描述输入一个链表,反转链表后,输出链表的所有元素。思想:利用栈public static ListNode ReverseList(ListNode head){ if(head == null) return null; else{ Stack stack = new Stack(); ListNode p = head; whil转载 2017-09-29 22:43:17 · 131 阅读 · 0 评论 -
剑指offer之七---跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。时间限制:1秒空间限制:32768K思路一:1.假设当有n个台阶时假设有f(n)种走法。 2.青蛙最后一步要么跨1个台阶要么跨2个台阶。 3.当最后一步跨1个台阶时即之前有n-1个台阶,根据1的假设即n-1个台阶有f(n-1)种走转载 2017-09-21 23:20:23 · 176 阅读 · 0 评论 -
剑指offer之二十二---数组中出现次数超过一半的数字
/** * 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 * 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。 * 由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。 * 如果不存在则输出0。 */public static int MoreThanHalfNum_Solution(in转载 2017-10-21 12:19:11 · 153 阅读 · 0 评论 -
剑指offer之二十三---最小的K个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。public static ArrayList GetLeastNumbers_Solution(int[] input , int k){ /** * 首先拿到这个题的想法是:先排序,然后把前k个数放入list中 */ ArrayL转载 2017-10-22 11:08:55 · 162 阅读 · 0 评论 -
剑指offer之二十一---复杂链表的复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思想:/* 1、复制每个节点,如:复制节点A得到A1,将A1插入节点A后面 如原来是A->B->C 变成A->A'->B->B转载 2017-10-13 22:50:10 · 153 阅读 · 0 评论 -
剑指offer之十七---包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。链接:https://www.nowcoder.com/questionTerminal/4c776177d2c04c2494f2555c9fcc1e49来源:牛客网思路:用一个栈data保存数据,用另外一个栈min保存依次入栈最小的数比如,data中依次入栈,5, 4, 3,8转载 2017-10-06 21:57:24 · 832 阅读 · 0 评论 -
剑指offer之十六---栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)链接:https://www.nowcoder.com/questio转载 2017-10-06 20:40:08 · 150 阅读 · 0 评论 -
剑指offer之九---矩形覆盖
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?时间限制:1秒空间限制:32768K思路:类似青蛙跳台阶,找规律,画图,依然是斐波那契数列,两种方法,一种是递归,一种是迭代,肯定迭代时间用的短;依旧是斐波那契数列 2*n的大矩形,和n个2*1的小矩形 其中target*2转载 2017-09-24 11:28:05 · 169 阅读 · 0 评论 -
剑指offer之十---二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三转载 2017-09-24 23:14:01 · 131 阅读 · 0 评论 -
剑指offer之十一---数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。时间限制:1秒空间限制:32768K热度指数:149847我的思路二种:(比较菜)思路一:库函数:return Math.pow(base, exponent);//41ms 9120k思路二:累乘int count = 0;转载 2017-09-25 23:14:08 · 181 阅读 · 0 评论 -
剑指offer之三---从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。时间限制:1秒空间限制:32768K/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;*转载 2017-09-16 22:17:51 · 156 阅读 · 0 评论 -
剑指offer之二---替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。时间限制:1秒空间限制:32768K思路一:使用String的replaceAllpublic String replaceAll(String regex, String replace...转载 2017-09-14 22:53:05 · 124 阅读 · 0 评论 -
剑指offer之一---二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。时间限制:1秒空间限制:32768K思路一:首先我们选择从左下角开始搜寻,(为什么不从左上角开始搜寻,左上角向右和向下都是递增,那么对于一个点,对于向右和向下会产生一个岔路;如果我们选择从左下脚开始搜寻的话,如果大于就向右,如...转载 2017-09-13 23:20:56 · 150 阅读 · 0 评论 -
剑指offer之四---用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。时间限制:1秒空间限制:32768K:入队:将元素进栈A出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈; 如果不为空,栈B直接出栈。public class Queue { Stack stack1 = new Stack()转载 2017-09-18 22:41:39 · 289 阅读 · 0 评论 -
剑指offer之五---旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。时间限制:3秒空间限制:32768K思路:正确做法需要分为: 1转载 2017-09-19 23:23:29 · 227 阅读 · 0 评论 -
剑指offer之十二---调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。时间限制:1秒空间限制:32768K思路一:以空间换时间,新开辟一个数组链接:https://www.nowcoder.com/questionTerminal/beb5aa231adc45b2a转载 2017-09-28 12:45:36 · 179 阅读 · 0 评论 -
剑指offer之十三---链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。public static ListNode FindKthTotail(ListNode head , int k){ /** * 算法思想:要想查倒数第k个,可以查正数第n-k个 * 首先使p指向head,用count进行链表的统计 * 然后使q指向head,计算器current统计到第count-k个结束转载 2017-09-28 22:29:29 · 125 阅读 · 0 评论 -
剑指offer之十四---反转链表
题目描述输入一个链表,反转链表后,输出链表的所有元素。思路:将链表中的结点入栈,出栈,形成新链表;public static ListNode ReverseList(ListNode head){ if(head == null) return null; else{ Stack stack = new Stack(); ListNode p转载 2018-01-01 11:27:34 · 142 阅读 · 0 评论