剑指offer刷题
剑指offer刷题训练
SuperiorPluto
这个作者很懒,什么都没留下…
展开
-
剑指offer7重建二叉树
重建二叉树描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。代码及解释public class Test { /* * 二叉树节点类 */ class TreeNod...原创 2019-04-27 16:17:27 · 150 阅读 · 0 评论 -
剑指offer58~翻转字符串
ReverseWordsInSentenceDescription输入一个英文句子,翻转句子中单词的顺序,但是单词内部字符的顺序不变,为了简答起见,标点符号和普通字母一样处理。例如:输入字符”I am a student.”,则输出”student. a am I”。Solution两次翻转字符串。第一步翻转:翻转句子中的所有字符。结果是连单词内部的顺序也被翻转了。第二步翻转:仅翻转单...转载 2019-05-23 15:59:52 · 301 阅读 · 0 评论 -
剑指offer42~连续子数组的最大值
GreatestSumOfSubarraysDescription输入一个整数数组,整数里面有正数也有负数。数组中的一个或者连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。Solution1动态规划首先要知道这是一个递归问题,极大的长度下的解肯定是一个不那么大的长度进一步得到的。Dpmax存储最大的和,dp表示当前的子数组的和,递归公式:dp[i] = ...转载 2019-05-27 15:34:17 · 198 阅读 · 0 评论 -
剑指offer14~剪绳子
MaxCuttingRopeDescription给你一根长度为n的绳子,请把绳子剪成m段(m,n都是整数,n>1并且m>1),每段绳子的长度乘积之和最大是多少?例如,当绳子长度为8,剪成长度分别为2,3,3的三段,此时得到最大乘积是18.Solution1动态规划首先要知道这是一个递归问题,极大的长度下的解肯定是一个不那么大的长度进一步得到的。dp数组作为存储最大值的数组,...转载 2019-05-25 20:28:33 · 137 阅读 · 0 评论 -
剑指offer50~第一次只出现一次的字符(一)
The FirstNotRepeatingCharDescription字符串中第一个只出现一次的字符。例如:输入“abacccdef”,则输出“b”。Solution一下子想到了暴力搜索,暴力求解,时间复杂度o(n^2),空间复杂度o(1)。另外,可以用哈希表,时间复杂度O(n),可以好好利用哈希的键和值的作用!Codepublic printFirstLetter3(String...原创 2019-05-12 19:04:09 · 154 阅读 · 0 评论 -
剑指offer39~数组中出现次数超过一半的数字
MoreThanHalfNumberDescription数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如,输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组出现了5次,超过了数组长度的一半,因此输出2.Solution哈希表解决。在剑指offer50题的基础稍作修改即可。Codeimport java.util.HashMap;impo...原创 2019-05-21 16:43:12 · 96 阅读 · 0 评论 -
剑指offer58(2)~左旋转字符串
ReverseWordsInSentence(II)Description字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋操作的功能。例如:输入字符“abcdefg”和数字“2”,则输出“cdefgab”。Solution1最简单的想法:找子串,两部分连到一起。public class P286_LeftRotateString { ...原创 2019-05-24 16:13:00 · 125 阅读 · 0 评论 -
剑指offer53~在排序数组中查找数字
The Amount Of A Certain Character In Sorted ArrayDescription统计一个数字在排序数组中出现的次数。例如,输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4.Solution 方法一:暴力搜索在O(n)的时间内便利,统计这个数字出现的次数。 方法二:二分法定位数字出现的位置,按照...原创 2019-05-15 21:14:26 · 157 阅读 · 0 评论 -
剑指offer21~调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面Description输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。Solution 扫描数组,如果发现偶数出现在奇数的前面,就交换他们的顺序。Code public static void Transferorder (int[] data1){ int i=0,j=d...原创 2019-05-20 11:16:34 · 119 阅读 · 0 评论 -
剑指offer9 用两个栈实现队列
Queue with two stacksDescription用两个栈实现一个队列。SolutionCodeclass MyQueue<T>{ private Stack<T> stack1 = new Stack<>(); private Stack<T> stack2 = new Stack<>(); ...原创 2019-05-07 15:35:57 · 118 阅读 · 0 评论 -
Java_剑指offer11~旋转数组的最小数字
TheMinInRotatedArrayDescription把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.Solution从头到尾遍历一下,时间复杂度为O(n),直观的解法并不是题目的本意。下面是解析过程Codep...原创 2019-05-14 16:02:59 · 213 阅读 · 0 评论 -
剑指offer刷题板
Dir字符串替换空格(https://blog.csdn.net/weixin_42662955/article/details/89494407)页码题目51替换空格12419.正则表达式匹配http://www.jianshu.com/p/462f54c25e3f12720.表示数字的字符串http://www.jianshu.com/p/47738...原创 2019-05-06 21:00:35 · 224 阅读 · 0 评论 -
剑指offer6 从尾到头打印链表
从尾到头打印链表描述输入一个链表的头结点,从头到尾反过来打印每个节点的值。方法 递归 非递归代码1.递归package chapter2;import structure.ListNode;import java.util.Stack;/* 从尾到头打印链表*/public class PrintListInReversedOrder {//递归版public...转载 2019-04-25 16:27:57 · 143 阅读 · 0 评论 -
剑指offer47 礼物的最大价值
The Max Value of presentsDescription在一个m*n的棋盘上每一格都放有一个礼物,每个礼物都有一定的价值(大于0)。假如你从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格,直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物?Solution典型的动态规划问题。基于循环的代码能够解决这个问题,为了存储缓存的中间结果,...原创 2019-05-05 19:34:03 · 324 阅读 · 0 评论 -
剑指offer3 数组中重复的数字
数组中重复的数字问题一个长度为n的数组,值得范围在0~n-1内,有一个或多个数字重复,求其中任意一个重复的数字(后续可能会求所有重复的数字,那么就是返回一个数组)。方法暴力求解,时间复杂度o(n^2),空间复杂度o(1)代码public class DuplicationInArray { public static int getDuplication(int[] dat...原创 2019-04-19 20:51:14 · 136 阅读 · 0 评论 -
剑指offer4 二维数组中查找
二维数组中查找描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列也都是按照从上到下递增的顺序排序。完成一个函数,输入一个二维数组和一个整数,判断该数组中是否含有该整数。方法最开始的想法肯定就是暴力搜索了,双重for循环,但是这样就和题目中给定的递增的条件没什么关系了,显然不是题目的本意。于是,采取另一种办法,每次搜索从是从二维数组的右上角开始。若是大于目标数,删掉该行;同理,...原创 2019-04-21 16:10:49 · 174 阅读 · 0 评论 -
剑指offer5 替换空格
替换空格描述请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy”,则输出”We%20are%20happy”.方法一种是使用不改变字符串的方法,利用stringbuilder方法new一个,从原数组往外拿的过程中判断空格等等。原理很简单。记住StringBuilder。另一种是改变元字符串,增加长度,再添加。代码public class R...原创 2019-04-24 15:29:09 · 195 阅读 · 0 评论 -
剑指offer30~包含min函数的栈
StackWithMinDescription定义一个栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的函数。在该栈中,要求调用时间复杂度为O(n)。Solution1在保存原先栈的基础上,重新定义一个栈来保存栈的最小值。 import java.util.Stack; public class P165_StackWithMin { public static v...转载 2019-05-29 12:03:43 · 105 阅读 · 0 评论