
剑指offer
文章平均质量分 88
_初六
这个作者很懒,什么都没留下…
展开
-
题6:从尾到头打印链表
我GitHub上的:剑指offer题解从尾到头打印链表方法一:典型的“先进后出”,所以使用栈来实现。方法二:既然用栈来实现,而递归本质上也是一个栈的结构,自然可以用递归来实现。每遍历到一个节点的时候,先递归输出其后面所有节点从尾到头的值,再输出该节点本身的值。(有个问题:当链表非常长的时候,就会导致函数调用的层级很深,从而有可能导致函数调用栈溢出。因此方法1较好)...原创 2018-04-16 20:40:06 · 1236 阅读 · 0 评论 -
题40:最小的k个数
我GitHub上的:剑指offer题解题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。思路1:把输入的n个整数进行排序,排序之后取前面的k个数。时间复杂度O(nlogn)思路2:基于partition函数。如果基于数组的第k个数字来调整,则使得比第k个数字小的所有数字都位于数组的左边,比第k个数字大的所有数字...原创 2019-05-08 14:05:38 · 220 阅读 · 0 评论 -
题14:剪绳子
我GitHub上的:剑指offer题解动态规划的题:0-1背包问题题目:给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]*k[1]*...*k[m]可能的最大乘积是多少?动态规划法:动态规划求解问题的四个特征:①求一个问题的最优解;②整体的问题的最优解是依赖于...原创 2019-04-24 14:53:53 · 272 阅读 · 0 评论 -
背包问题
题目描述:给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大。举例:有5个物品,重量分别是2,2,6,5,4,价值分别是6,3,5,4,6,容量为10。分析:物品要么放要么不放,所以对于一种物品的装入状态可以取0和1.我们设物品i的装入状态为xi,xi∈ (0,1),此问题称为0-1背包问题。采用动态规划问...原创 2019-04-24 12:40:30 · 1160 阅读 · 0 评论 -
题13:机器人的运动范围
我GitHub上的:剑指offer题解题目:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个...原创 2019-04-23 14:41:06 · 166 阅读 · 0 评论 -
题12:矩阵中的路径
我GitHub上的:剑指offer题解题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced...原创 2019-04-23 10:55:05 · 248 阅读 · 0 评论 -
题9:用两个栈实现队列(两个队列实现栈)
我GitHub上的:剑指offer题解用两个栈实现队列用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:入队push:直接进入栈1出队pop:如果栈2为空,将栈1的元素出栈并入栈到栈2;如果栈2不为空,栈2出栈import java.util.Stack;/** * * @author yajie *两个栈实现一个...原创 2019-04-22 16:57:06 · 463 阅读 · 0 评论 -
题8:二叉树的下一个结点
我GitHub上的:剑指offer题解题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。例子:分析:分几种情况 1.有右子树的,它的下一个是右子树的最左子节点。(一直沿着指向左子结点的指针找到的叶子节点即为下一个节点) 2.没有右子树的,且如果它是它父节点的...原创 2019-04-22 15:31:35 · 226 阅读 · 0 评论 -
题56:数组中只出现一次的数字
我GitHub上的:剑指offer题解问题1:数组中只有1个数字仅出现一次,其余数字出现两次,请找到这个仅出现一次的数字。public static int find1from2(int[] arr) { int len = arr.length; int sum = 0; for(int i = 0; i < len; i++){ sum ^= ...原创 2019-04-11 17:22:40 · 218 阅读 · 0 评论 -
用两个栈实现队列
用两个栈实现队列题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路:in 栈用来处理入栈(push)操作,out 栈用来处理出栈(pop)操作。一个元素进入 in 栈之后,出栈的顺序被反转。当元素要出栈时,需要先进入 out 栈,此时元素出栈顺序再一次被反转,因此出栈顺序就和最开始入栈顺序是相同的,此时先进入的元素先退出,这就是队列的顺序。 ...原创 2018-04-18 10:11:53 · 1342 阅读 · 0 评论 -
矩形覆盖
矩形覆盖题目描述:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?分析:当n=1时,就1种方法;当n=2时,2种方法:两个小矩形横着或者竖着当n=3时,我们可以从左边开始覆盖,可以选择是横着放还是竖着放。当n=n时,我们依旧从左边开始覆盖 若竖着放第一块后,剩下的子问题就是f(n-1) 若横着放第一块后,第...原创 2018-05-03 13:34:50 · 311 阅读 · 0 评论 -
二进制中1的个数+将十进制转换成二进制的方法
在解决该题之前,我们先来了解一下十进制转换成二进制的方法将十进制转换成二进制的方法方法一:利用Interger.toBinaryString()的方法。方法二:除基倒取余法 输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2...依次循环,直到商为0结束,把余数倒着依次排列,就构成了转换后的二进制数public class DecimalToBinary { publ...原创 2018-05-03 15:50:29 · 940 阅读 · 0 评论 -
跳台阶+变态跳台阶(java)
我GitHub上的:剑指offer题解跳台阶题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。并分析算法的时间复杂度分析:若跳n级台阶,第一次可以跳1级,剩下就是f(n-1);第一次可以跳2级,剩下就是f(n-2)。所以f(n)=f(n-1)+f(n-2)。其中f(0)=0;f(1)=1;f(2)=2。这就是一个Fibon...原创 2018-05-03 10:36:03 · 261 阅读 · 0 评论 -
题10:斐波那契数列(java)
我GitHub上的:剑指offer题解斐波那契数列题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1...原创 2018-05-02 21:33:15 · 498 阅读 · 0 评论 -
合并两个排序的链表(java)
我GitHub上的:剑指offer题解合并两个排序的链表输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则思路一:新建一个链表,从前往后遍历两个链表,谁小谁先进新链表。采用递归的方式。思路二:思路一采用的是递归的方法,思路二采用非递归的方法。思路一新建一个链表,从前往后遍历两个链表,谁小谁先进新链表。采用递归的方式。...原创 2018-05-02 20:33:10 · 336 阅读 · 0 评论 -
反转链表(java)
我GitHub上的:剑指offer题解反转链表输入一个链表,反转链表后,输出链表的所有元素。先定义一个结点类public class ListNode { int val; ListNode next = null; public ListNode(int val) { this.val = val; }}思路一:递归反转法采用递归的...原创 2018-05-02 16:38:51 · 261 阅读 · 0 评论 -
题7:重建二叉树(Java)
我GitHub上的:剑指offer题解题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:前序遍历的第一个值为根节点的值,使用这个值将中序遍历结果分成两部分,左部分为树的左子树中...原创 2018-04-16 21:59:57 · 1436 阅读 · 0 评论 -
题5:替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。(解法一,面试的时候不会给分哦)1.解法一:先将StringBuffer转换成String,然后用string类的函数replace来解决public class Solution { public static String r...原创 2018-03-19 08:59:58 · 204 阅读 · 0 评论 -
题41:数据流中的中位数
我GitHub上的:剑指offer题解题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。思路:数据是从一个数据流中读出来的,因此数据的数目随着时间的变化而...原创 2019-05-08 17:12:45 · 246 阅读 · 0 评论