
algorithms
文章平均质量分 68
ourei
这个作者很懒,什么都没留下…
展开
-
5元10元找钱问题
问题:有10个人去买票,票价5元,其中5个人有5元的钱,另外5个只有10元的钱。售票员没有5元的钱,每个人只买一张票,为使售票员的5元钱够用,这10个人有多少种排法? 分析:用‘1’表示有5元的人,‘0’表示有10元的人。问题实际上是求由5个0和5个1排列的字符串,从1开始到长度为k(k<=10)的子串中任何时候1出现的次数要比0出现的多。比如:排列1111100000是符合要求的。...原创 2010-12-14 11:19:33 · 1474 阅读 · 0 评论 -
排序系列(六)--堆排序
//author:lilywangcnpublic class HeapSort { private static int[] array=new int[]{10,30,20,4,9,-1,10,6,15}; /** /** * @param args */ public static void main(String[] args) { // TOD...原创 2011-04-12 18:22:39 · 144 阅读 · 0 评论 -
排序系列(五)---归并排序
//author:lilywangcnpublic class MergeSort { //private static int[] array=new int[]{10,30,20,4, 9,-1,6,15,12,8,0,20,4}; private static int[] array=new int[]{10,30,20,4,9,-1,6,15}; /** * @...原创 2011-04-12 18:20:13 · 89 阅读 · 0 评论 -
排序系列(四)---希尔排序
//author:lilywangcnpublic class ShellSort { private static int[] array=new int[]{10,30,20,4, 9,-1,6,15,12,8,0,20,4}; public static void main(String[] args){ print(); for(int gap=arr...原创 2011-04-12 18:18:07 · 93 阅读 · 0 评论 -
排序系列(三)---插入排序
//lilywangcnpublic class InsertSort { public static void main(String[] args) { // TODO Auto-generated method stub int[] array=new int[]{10,30,20,4,9,-1,6,15}; for(int i=1;i<arra...原创 2011-04-12 18:15:31 · 81 阅读 · 0 评论 -
排序系列(二)--快速排序
//author:lilywangcnpublic class QuickSort { private static int[] array=new int[]{10,30,20,4,9,-1,6,10,20,4,10,15}; /** * @param args */ public static void main(String[] args) { // ...原创 2011-04-12 18:13:18 · 93 阅读 · 0 评论 -
排序系列(一)---冒泡排序
//author:lilywangcnpublic class BubbleSort { public static void main(String[] args){ int[] array=new int[]{10,30,20,4,9,-1,6,15}; for(int j=array.length-1;j>1;j--){ for(int i=0;i&l...原创 2011-04-12 18:10:43 · 84 阅读 · 0 评论 -
二叉查找树系列
import java.util.ArrayList;import java.util.List;//author:lilywangcnclass Node { public Node left = null; public Node right = null; public int key; public Node(int key) { this.ke...原创 2011-06-01 17:54:08 · 124 阅读 · 0 评论 -
棋盘覆盖问题
算法分析,以4*4的方格为例,特殊方格只能在左上,右上,左下,右下四个区间中的一个。排列形式可能是如下几种(1)特殊方格在左上区域,那么其他几个区域的特殊方格可定,一定分布方式如下,用1标识其他几个区域的特殊方格 1 1...原创 2011-05-26 11:42:00 · 153 阅读 · 0 评论 -
趣味算法(一)Josephus问题
Josephus问题求解: 设有n个人围坐一个圆桌周围,,现从第S人开始报数,数到第m的人出列, 然后从出列的下一个重新开始报数,数列的第m个人又出列……如此重复,直 到所有的人全部出列为止。对任意给定的n、s、m,求按出列次序得到的n个 人员的顺序表。 分析:对于n个人,每一次出列一个人,余下的n-1个人仍然是一个Josephus问题,因此可以使用递归的方...原创 2011-05-10 17:48:10 · 487 阅读 · 0 评论 -
数组中前k大的数
问题:《编程之美》page139.寻找最大的k个数。 方法一:通过全排序(快速排序),然后获取前k个数即位最大的k个数。算法复杂度:O(nlogn).方法二:通过部分排序。(选择排序,冒泡排序),直接获取前k个最大的数。算法复杂度O(n*k).当k比较小的时候可以考虑方法三:快速排序的变种。前面寻找数组中第k大数的过程中,当找准数组中第k大数的位置时,数组中比k大的数据都在k的le...原创 2011-05-09 16:04:23 · 661 阅读 · 0 评论 -
数组中第k大的数
方法:有两种。参见:http://hi.baidu.com/mianshiti/blog/item/3dc76cee353279dfb31cb1a0.html第一种:使用排序(快速排序),将数组排序后,第k大的数就在第k个位置上。算法复杂度:o(n*logn)第二种:类似快速排序的变种。通过二分的思想,找到第k大的数字,而不必对整个数组排序。从数组中随机选一个数t,通过让这个数和其它数...原创 2011-05-09 15:39:43 · 174 阅读 · 0 评论 -
分治算法(二)--》数组中的第二小值
问题:《编程之美》,page170. 寻找数组中的第二小数public class FindSecondMin { /** * @author:lilywangcn */ public static void main(String[] args) { // TODO Auto-generated method stub int[] array=new in...原创 2011-05-09 14:23:04 · 824 阅读 · 0 评论 -
分治算法(一)--》数组中的最小值最大值
问题:《编程之美》page166. 寻找数组中的最大值,最小值。 public class MinMax { /** * @author:lilywangcn */ public static void main(String[] args) { // TODO Auto-generated method stub int[] array=n...原创 2011-05-09 14:19:01 · 151 阅读 · 0 评论 -
排序系列(八)--选择排序
public class SelectSort { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int[] array=new int[]{10,30,20,4,9,-1,6,15}; for(...原创 2011-05-09 13:57:30 · 100 阅读 · 0 评论 -
排序系列(七)--基数排序
import java.util.ArrayList; //author:lilywangcnpublic class RadixSort { //private static int[] array={36,5,16,98,95,47,32,36,48}; private static int[] array={614,738,921,485,637,101,215,5...原创 2011-04-12 18:23:47 · 133 阅读 · 0 评论