剑指Offer算法题
文章平均质量分 55
zIconKr
这个作者很懒,什么都没留下…
展开
-
剑指Offer------跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。:1.假设当有n个台阶时假设有f(n)种走法。 2.青蛙最后一步要么跨1个台阶要么跨2个台阶。 3.当最后一步跨1个台阶时即之前有n-1个台阶,根据1的假设即n-1个台阶有f(n-1)种走法 4.原创 2017-10-03 09:47:24 · 222 阅读 · 0 评论 -
剑指Offer------栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)借助一个辅助的栈,遍历压栈顺序,先将第一个放入辅助栈,这里是1,然后判原创 2017-10-04 11:19:37 · 232 阅读 · 0 评论 -
剑指Offer------从上往下打印二叉树(层序遍历)
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。借助一个队列即可解决import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/** * * @author zy * @date 2017年10月4日 上午11:29:30 *原创 2017-10-04 12:34:35 · 224 阅读 · 0 评论 -
剑指Offer------数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。(推荐使用解法二,时间复杂度较低)解法一:一开始首先想到的是暴力破解 遍历只需要遍历到数组的长度一半位置即可,因为后序不可能再出现原创 2017-10-04 19:47:45 · 187 阅读 · 0 评论 -
剑指Offer------字符串的排列(全排列)
题目描述 :输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b, c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。import java.util.ArrayLis原创 2017-10-04 19:14:42 · 322 阅读 · 0 评论 -
剑指Offer------最小的k个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。这就是数组排序算法,但是考察的是时间复杂度做了两种解法:1.冒泡排序,时间复杂度O(k*n) 2.快速排序,时间复杂度O(nlogn)import java.util.ArrayList;原创 2017-10-05 09:14:16 · 211 阅读 · 0 评论 -
剑指Offer------连续子数组的最大和
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量原创 2017-10-05 09:59:51 · 182 阅读 · 0 评论 -
剑指Offer------把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。先把整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接排序规则如下:若ab>ba 则a>b若ab若ab=ab 则a=b解释说明:比原创 2017-10-05 11:02:37 · 204 阅读 · 0 评论 -
剑指Offer------第一个只出现一次的字符
题目描述在一个字符串(1采用散列表 --HashMap存储字符和出现的次数import java.util.HashMap;/** * * @author zy * @date 2017年10月5日 上午11:29:49 * @Decription 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它原创 2017-10-05 12:18:52 · 149 阅读 · 0 评论 -
剑指Offer------两个链表的第一个公共结点
题目描述输入两个链表,找出它们的第一个公共结点。使用HashSet存储结点即可。package com.niuke;import java.util.HashSet;/** * * @author 周颖 * @date 2017年10月6日 上午9:33:59 * @Decription 输入两个链表,找出它们的第一个公共结点。 */public cl原创 2017-10-06 09:43:16 · 186 阅读 · 0 评论 -
剑指Offer------二叉搜索树的第k个结点
二叉搜索树(Binary Search Tree)(又:二叉查找树,二叉排序树)它或者是一颗空树,或者是具有下列性质的二叉树;若它的左子树不空,则左子树上所有的结点的值均小于它的根节点的值,若它的右子树不空,则右子树上所有的结点的值均大于它的根结点的值。它的左、右子树也分别为二叉排序树例题给定一颗二叉搜索树,请找出其中的第k小的结点。例如, 5 / \ 3 7 /\原创 2017-10-13 18:45:13 · 238 阅读 · 0 评论 -
剑指Offer------把二叉树打印成多行(层序遍历)
题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。:本题就是多了个条件一层输出一行那么就多设置两个变量即可,一个此行开始start,另一个此行结束end当遍历到end时,就将这行数据存入list中即可package com.ex.string;import java.util.ArrayList;import java.uti原创 2017-10-13 21:26:58 · 252 阅读 · 0 评论 -
剑指Offer------包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。1.用一个栈data保存数据,另一个栈min保存依次出现的最小数ex:data中依次入栈 5, 4 ,3,3,3,8,10,1 min中依次入栈5,4,3,3,3,no,no,1no表示不入栈每次入栈的时候,如果入栈的元素比min中的栈顶元素小或等于则入栈,否则不入栈。im原创 2017-10-04 10:46:32 · 225 阅读 · 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-04 09:30:26 · 166 阅读 · 0 评论 -
剑指Offer------调整数组顺序使奇数位于偶数前面
题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。:运用键索引技术法首先统计奇数的个数然后新建一个等长数组,设置两个指针,奇数指针从0开始,偶数指针从奇数个数的末尾开始.运用了空间换时间的算法------时间复杂度O(n),空间复杂度O(n)。/*原创 2017-10-03 13:19:13 · 190 阅读 · 0 评论 -
剑指Offer------重建二叉树
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * * @author zy * @date 2017年10月2日 下午1:00:17 * @Decription 输入某二原创 2017-10-03 10:40:27 · 224 阅读 · 0 评论 -
剑指Offer------变态跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。关于本题,前提是n个台阶会有一次n阶的跳法。分析如下: f(1) = 1 f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次数。f(3) = f(3-1) + f(3-2) + f(3-3) ...原创 2017-10-03 10:32:40 · 208 阅读 · 0 评论 -
剑指Offer------旋转数组的最小数字
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。:采用二分法解答,mid = (low +high)/2需要考虑三种情况:(1)array[m原创 2017-10-02 16:50:22 · 183 阅读 · 0 评论 -
剑指Offer------用两个栈实现队列(用两个队列实现栈)
问题一:用两个栈实现一个队列的功能?要求给出算法和思路:入队:将元素进栈A出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈; 如果不为空,栈B直接出栈。import java.util.Stack;/** * * @author zy * @date 2017年10月2日 下午2:02:23 * @Dec原创 2017-10-02 14:22:12 · 163 阅读 · 0 评论 -
剑指Offer------从尾到头打印链表
题目描述:输入一个链表,从尾到头打印链表每个节点的值。采用递归思想/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }原创 2017-10-03 13:46:05 · 163 阅读 · 0 评论 -
剑指Offer------链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。:两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一指针走(k-1)步,即到达第k个结点。然后两个指针同时开始向后移动,当第一个指针到达最后的结点时候,第二个结点所在位置就是倒数第k个结点了。/** * * @author zy * @date 2017年10月3日 下午1:49:40 * @D原创 2017-10-03 16:27:05 · 214 阅读 · 0 评论 -
剑指Offer------反转链表
题目描述输入一个链表,反转链表后,输出链表的所有元素。/** * * @author zy * @date 2017年10月3日 下午5:15:33 * @Decription 输入一个链表,反转链表后,输出链表的所有元素。 * */class ListNode { int val; ListNode next = null; ListNode(int原创 2017-10-03 17:23:50 · 233 阅读 · 0 评论 -
剑指Offer------合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。/** * * @author zy * @date 2017年10月3日 下午5:45:14 * @Decription 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 */public class Ex9 { cl原创 2017-10-03 18:17:38 · 200 阅读 · 0 评论 -
剑指Offer------树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析见注解/** * * @author zy * @date 2017年10月3日 下午6:20:22 * @Decription 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) */public class Ex原创 2017-10-03 20:07:20 · 176 阅读 · 0 评论 -
剑指Offer------二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。此题需要注意就是不要绕进去首先,得明确知道当根节点(8)的左子树和右子树交换位置后,其左子树对应的子树和右子树对应的子树位置也是交换的。故这题就很简单了,只要将所有左右子树交换位置就ok了输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10原创 2017-10-03 20:27:55 · 192 阅读 · 0 评论 -
剑指Offer------二叉搜索树的后序遍历
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。/** * * @author zy * @date 2017年10月13日 下午9:34:21 * @Decription 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。 *原创 2017-10-14 09:40:22 · 183 阅读 · 0 评论