
算法
restart101225
在每一丝曙光破晓之前,一定是快要窒息的漫漫长夜。
展开
-
算法之插入排序
平均时间复杂度:O(n2)空间复杂度:O(1) (用于记录需要插入的数据)稳定性:稳定import java.util.Arrays;public class Test { public static void main(String[] args) { Integer[] arr = {3, 5, 2, 8, 9, 10}; arr = Test.sort(a原创 2017-07-13 22:59:19 · 199 阅读 · 0 评论 -
剑指offer(八)跳台阶
题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。案例 台阶 跳法 1 1 2 2 3 3 4 5 5 8等等,以此类推分析我想出来的方法是,利用组合来获取最终结果即如果是全部一级一级跳,有一种方法;然后一个2级,其他都是一级跳,有n种方法;以此类推,就是组合的计算,m个2级,则是在 (n - 2原创 2017-08-28 16:47:19 · 332 阅读 · 0 评论 -
JAVA实现排列组合
排列的计算公式: 组合的计算公式 阶乘的实现 /** * 计算阶乘数,即n! = n * (n-1) * ... * 2 * 1 * @param n * @return */ private static long factorial(int n) { long sum = 1; while( n > 0 )原创 2017-08-28 13:54:27 · 22081 阅读 · 2 评论 -
剑指offer(六)旋转数组的最小数字
题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。若数组大小为0,请返回0。NOTE:给出的所有元素都大于0。案例 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 分析 看到题目和案例,说是非递减数组,那默认就是递增数组了于是按照递增数组思路来做,第一想法就是从后往原创 2017-08-27 23:07:56 · 218 阅读 · 0 评论 -
剑指offer(五)两个栈实现队列
题目 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。分析 这题没有什么案例,就是用两个栈来完成队列的操作之前也写过这部分代码,自己找到看了一下,感觉有点不对,于是试了一下,发现真的不通过,正好再完善一下栈的特性是先进后出,队列呢是先进先出,想用两个栈完成队列的操作还是挺简单的先将一个栈作为存储,即每次进来都用stack1来进行存储,然后出的时候,将所原创 2017-08-27 20:33:45 · 231 阅读 · 0 评论 -
剑指offer(四)重建二叉树
题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。案例 输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。分析 对于这道题,之前都是接触二叉树的遍历,对于逆向重建真的没有一点思路,然后想找规律做出来,最终想法受限,结果失败了。然后看网上大神的做法和思路原创 2017-08-27 20:22:45 · 248 阅读 · 0 评论 -
剑指offer(三)从尾到头打印链表
题目 输入一个链表,从尾到头打印链表每个节点的值。案例 输入一个链表,将值打印出来(我的案例上是将值放到ArrayList中去) ListNode root = new ListNode(); root.val = 1; root.nxt = new ListNode(); root.nxt.val = 2; root.nxt.nxt =原创 2017-08-23 17:49:44 · 261 阅读 · 0 评论 -
剑指offer(二)替换字符
题目展示 请实现一个函数,将一个字符串中的空格替换成“%20”。案例: 当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy.思考题目 第一想法,直接用字符串的replace方法替换,即str.toString().replace(” “, “%20”);然后拿去验证,发现竟然验证通过了。本着精益求精的思想,想着可能人家想让我们自己实现repl原创 2017-08-23 16:20:14 · 234 阅读 · 0 评论 -
剑指offer(一)二维数组中的查找
题目是:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上往下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该函数。案例: 一个二维数组,每行、每列都是递增排序。 例如下面这个数组,如果查找数字7,则返回true,如果查找数组5,则返回false。 1 2 8 9 2 4 9 12 4 7 10 13 6 8原创 2017-08-23 12:12:47 · 254 阅读 · 0 评论 -
算法之冒泡排序
概念冒泡排序算法需要遍历几次数组。每次遍历都要比较连续相邻的元素,如果某一对相邻元素是降序,则互换它们的值,否则保持不变。由于较小的值像“气泡”一样逐渐浮向顶部,而较大的值沉向底部,所以叫冒泡排序。时间复杂度最差的情况下,冒泡排序算法需要进行n-1次遍历。第一次遍历需要n-1次比较,第二次遍历需要n-2次比较,依次进行;因此比较总数为:(n-1)+(n-2)+…+2+1=n(n-1)/2=O(n2原创 2017-08-31 11:09:42 · 494 阅读 · 0 评论