算法
loren-encoding
学生
展开
-
堆排序—Java
堆排序: 一棵完全二叉树,如果父节点的值大于等于左右节点的值,则称此完全二叉树为小根堆(小顶堆);如果父节点的值小于等于左右节点的值,则次完全二叉树为大根堆(大顶堆)。堆排序是建立在大顶堆或小顶堆的基础上的,通过不断的交换堆顶元素和堆尾元素,来对数组排序。基于大顶堆的堆排序,数组排序结果是升序的。基于小顶堆的堆排序,数组排序结果是降序的。流程: (1)建立堆 (2)交换堆顶与堆底元素 (3)原创 2017-08-17 10:24:47 · 353 阅读 · 0 评论 -
Partition函数
快排中核心的方法应该算是Partition函数了,它的作用就是将整个数组分成小于基准值的左边,和大于基准值的右边。普通的Partition函数是这样的:public static int partition1(int[] array,int lo,int hi){ //以第一个值为基准值,当然你也可以3取1, int key=array[lo]; wh原创 2017-08-17 15:06:27 · 27990 阅读 · 5 评论 -
两个大数相乘-Java
两个字符串表示两个非常大的数,请设计算法计算这两个大数的乘积,结果用字符串表示。例如S1=”7832974972840919321747983209327”,S2=”1987432091904327543957”,设计算法计算出S1*S2的结果,结果用String输出,不准用BigInter。思路: 根据手工计算两数相乘的过程,用代码实现这个过程。代码:import java.util.Scann原创 2017-08-02 11:35:39 · 3883 阅读 · 1 评论 -
打印1到最大的n位数-Java
在练习剑指offer的时候,第12题打印1到最大的n位数的时候,想找个java版的,但大家要么用BigInteger做,要么给出其他的方法。我觉得要给就给最好的方法,下面是我自己参考C++代码写的java版的全排列方法。代码:public class Quanpaixu { public static void print1ToMaxOfNDigits(int n){ if(n原创 2017-08-13 14:43:39 · 352 阅读 · 0 评论 -
归并排序-Java
归并算法:就是两个有序的序列,通过归并排序,变成一个有序的队列。 如图所示,对于一个序列的排序,可以这样做:首先,将序列分解成单个的数,,然后对相邻的有序序列通过排序逐渐整合为一个大的有序序列。这就是归并排序。下面是我写的java代码:public class GuiBingPaiXu { //此方法通过递归将数组分成单个的数字 public static void mergeSo原创 2017-08-21 14:57:48 · 275 阅读 · 1 评论 -
解压字符串
题目: 某位程序员想出了一种压缩字符串的方法,压缩后的字符串如下:3{a}2{bc}, 3{a2{c}},2{abc}3{cd}ef,现在需要你写出一个解压程序,还原原始的字符串,如: s=“3{a}2{bc}”return “aaabcbc” , s=”3{a2{c}}” return “accaccacc” ,s=”2{abc}3{cd}ef” return “abcabccdcdcdef”原创 2017-08-27 09:54:35 · 564 阅读 · 0 评论