- 博客(11)
- 收藏
- 关注
原创 仅用加减实现的二分查找(Mihai Patrascu)(基于斐波那契数列实现)
任务描述:编写一个程序,给定一个含有N个不同int值的按照升序排列的数组,判断它是否含有给定的整数。只能使用加法和减法以及常数的额外内存空间。程序的运行时间在最坏的情况下应该和logN成正比。教材提示:用斐波那契数代替2的幂(二分法)进行查找。用两个变量保存F(k)和F(k-1)并在[i,i+F(k)]之间查找。在每一步中,使用减法计算F(k-2),检查i+F(k-2)处的元素,并根据结果将搜
2017-03-23 22:56:38 763
原创 Josephus问题(基于数组的实现)
package Algorithm;import edu.princeton.cs.algs4.*;public class Josephus { public static void main(String[] args){ //完成准备工作 int N=StdIn.readInt(); int M=StdIn.readInt(); int[] people=new i
2017-03-16 17:41:03 1257
原创 将算术表达式由中序表达式转为后序表达式
哎,继续加油package Algorithm;import edu.princeton.cs.algs4.*;public class InfixToPostfix { public static boolean notLessthan(String a,String b){ if((a.equals("*")||a.equals("/"))&&(b.equals("*")||b.
2017-03-12 00:25:16 1359
原创 括号补全
编写一段程序,从标准输入得到一个缺少左括号的表达式并打印出补全括号之后的中序表达式。例如,给定输入:1 + 2 ) * 3 - 4 ) * 5 - 6 ) ) )你的程序应该输出:( ( 1 + 2 ) * ( ( 3 - 4 ) * ( 5 - 6 ) ) )package Algorithm;import edu.princeton.cs.algs4.*;pub
2017-03-11 17:53:05 1102
原创 括号配对
编写一个用例,从标准输入中读取一个文本流并使用栈判定其中的括号是否配对完整。例如,对于[ ( ) ] { } { [ ( ) ( ) ] ( ) } 程序应该打印true,对于[ ( ] ) 则打印false。package Algorithm;import edu.princeton.cs.algs4.*;public class Parentheses { public stat
2017-03-11 17:00:28 375
转载 Java协变(共变)数组和类型擦除(covariant array & type erasure)
1、数组的协变性数组的协变性(covariant)是指:如果类Base是类Sub的基类,那么Base[]就是Sub[]的基类。而泛型是不可变的(invariant),List不会是List的基类,更不会是它的子类。数组的协变性可能会导致一些错误,比如下面的代码:public static void main(String[] args) { Object[] ar
2017-03-11 13:05:07 1479
原创 回环变位
问题描述:如果字符串s中的字符循环移动任意位置之后能够得到另一个字符串t,那么s就被称为t的回环变位(circular rotation)。例如,ACTGACG就是TGACGAC的一个回环变位,反之亦然。判定这个条件在基因组序列的研究中是很重要的。编写一个程序检查两个给定的字符串s和t是否互为回环变位。(提示:答案只需要一行用到indexOf()、length()和字符串连接的代码)自己写的(
2017-03-04 21:07:02 448
原创 乱序检查
编写一个程序ShuffleTest,接收命令行M和N,将大小为M的数组打乱N次且在每次打乱之前都将数组重新初始化为a[i]=i。打印一个M×M的表格,对于所有的列j,行i表示的是i在打乱后落到j的位置的次数。数组中的所有元素的值都应该接近于N/M。import edu.princeton.cs.algs4.*;public class fly { // 让数组内的每一个数与它所处位置之后
2017-02-23 20:14:35 715
原创 模拟掷骰子
以下代码能够计算每种两个骰子之和的准确概率分布:int SIDES = 6;double[] dist = new double[2 * SIDES + 1];for (int i = 1; i <= SIDES; i++) for (int j = 1; j <= SIDES; j++) dist[i + j] += 1.0; for (int k = 2; k <= 2 * S
2017-02-23 12:49:34 3129
原创 随机连接
题目描述:编写一段程序,从命令行接收一个整数N和double值p(0到1之间)作为参数,在一个圆上画出大小为0.01且间距相等的N个点,然后将每对点按照概率p用灰线连接。代码实现:import edu.princeton.cs.algs4.*;public class fly { public static void paint(int N, double p) {
2017-02-21 21:32:50 588
原创 二项分布的递归实现
递归实现二项分布:public static double binomial(int N,int k,double p){ if(N==0&&k==0) return 1.0; if(N<0||k<0) return 0.0; return (1-p)*binomial(N-1,k,p)+p*binomial(N-1,k-1,p);}原理: (N,k)p^k*(1-p)^(
2017-02-21 13:41:33 565
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人