
算法学习
爱吃大盘鸡的小菜鸡
这个作者很懒,什么都没留下…
展开
-
用数组和链表实现泛型的栈和队列
注意的点: 1.如何实现iterator:主类继承Iterable接口,嵌套类继承Iterator接口,主类提供iterator()方法获取嵌套类的迭代器对象,嵌套类要重写hasnext();next();remove;三个方法。代码中栈实现了Iterable接口。 2.背包的实现只需要add方法,没有移除操作,比较简单, 因此不再实现 3.对列的resize的实现,数组中的游离元素 代码...原创 2020-01-11 22:32:29 · 327 阅读 · 0 评论 -
斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 比如1、1、2、3、5、8、13、21、34 分析 首先想到递归的方法,根据公式F(n)=F(n-2)+F(n-1);(n>=3) 这种情况下 时间复杂度为O(2^n),空间复杂度O(1). 代码 public class Solution {...原创 2019-12-05 10:44:55 · 209 阅读 · 0 评论 -
用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 知识点 栈和队列(先进后出和先进先出) 分析 边界条件:由于输入int型,无边界条件 自己的思路 push操作:若栈2为空,则直接往里push。若不为空,则先把栈2的元素依次出栈到栈1中,把新元素push到栈2,再把栈1的元素依次出栈到栈2中。通过这样的方式,保证每次入栈后新入栈的数据都是...原创 2019-12-04 15:28:11 · 182 阅读 · 0 评论 -
二叉树的下一个节点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 分析 接着前一天的分析工作做的,参考了书籍的分析。今天的分析过程: 使用一个番茄钟分析得出: 根据中序遍历的特点,左子树-根节点-右子树。既然已经输出了根节点(即给定的节点),则下一步的输出存在两种情况:有无右子树。 无右子树 根据中序遍历的...原创 2019-12-04 11:18:54 · 138 阅读 · 0 评论 -
重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 我的思路: 二叉树的遍历方式可以看这https://blog.youkuaiyun.com/wjwfighting/article/details/81670...原创 2019-11-24 20:24:13 · 134 阅读 · 0 评论 -
从尾到头打印链表
题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 我的思路 遍历列表,依次存入一个ArrayList中,然后再从后往前将其存入另一个ArrayList中 复杂度: 这样的方法时间复杂度O(n),空间复杂度O(n); /** * public class ListNode { * int val;//该节点存...原创 2019-11-22 11:53:29 · 113 阅读 · 0 评论 -
替换空格
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 我的思路: 调用系统函数,StringBuilder.replace("","%20")。但这样肯定不行的,不能这样做。 剑指Offer提供的解法:要和面试官沟通是否在原来的字符串上进行替换。如果不在的话,就新建,然后复制...原创 2019-11-22 09:36:47 · 203 阅读 · 0 评论 -
判断数组中是否存在重复数字
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 我的解题思路: 暴力穷举法,依次对比每个数,有重复就return。 边界条件: ...原创 2019-11-21 10:17:03 · 6051 阅读 · 1 评论 -
查找一个数是否在二维数组中
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 我的解题思路: 分析发现,左上角和右下角的数分别对应着数组的最小值和最大值。二维数组中对角线的元素分别对应着行列两种情况。通过分别判断这个数是否落在该元素对应的行或列中(行列的...原创 2019-11-20 10:40:48 · 1605 阅读 · 0 评论