
算法
算法四以及蓝桥杯训练集的知识以及题目合集
天又热了
,
展开
-
算法4-1.1.30数组练习
数组练习。编写一段程序,创建一个N*N的布尔数组a[][]。其中当i和j互质时(没有相同的因子),a[i][j]为true,否则为false。代码/** * 数组练习 */public class Main { public static void main(String[] args) { int N = 10; boolean[][] a = new boolean[N][N]; //System.out.println(" ");原创 2021-01-22 12:18:03 · 170 阅读 · 0 评论 -
算法4-1.1.29等值键
为 BinarySearch 类添加一个静态方法 rank (), 它接受一个键和一个整型有序数组(可能存在重复键)作为参数并返回数组中小于该键的元素数量,以及一个类似的方法 count () 来返回数组中等于该键的元素的数量。注意:如果1和j分别是rank(key,a)和count(key,a)的返回值,那么 a[i … i+j-1]就是数组中所有和key 相等的元素。代码public class Main { public static int rank(int[] a, int t, in原创 2021-01-22 12:17:55 · 163 阅读 · 0 评论 -
算法4-1.1.28删除重复元素
删除重复元素。修改BinarySearch类中的测试用例来删去排序之后白名单中所有重复元素。代码public class Main { public static void rank(int[] a, String[] keys, char arg){ int[] whiteList = new int[]{7,1,4,6,5}; Arrays.sort(whiteList); List<Integer> list = new Arra原创 2021-01-22 12:17:47 · 396 阅读 · 1 评论 -
算法4-1.1.27二项分布
二项分布。估计用以下代码计算binomial(100,50,0.25)将会产生的递归调用次数:public static double binomial(int N,int k,double p){if (N0 && k0) return 1.0;if (N<0 || k<0) return 0.0;return (1.0-p)binomial(N-1,k,p)+pbinomial(N-1,k-1,p);}将已经计算过的值保存在数组中并给出一个更好的实现。代码-太原创 2021-01-22 12:17:36 · 226 阅读 · 0 评论 -
算法4-1.1.26将三个数字排序
假设a,b,c和t都是同一种原始数字类型的变量.证明一下代码能够将a,b,c按照升序排列:/** * 证明以下代码能够使得a,b,c按照升序排列 * 第一个条件语句确保a<=b, * 第二个条件语句确保a<=c.因此确保a是最小的 * 第三个条件语句确保b<=c,因此确保c是最大的 * 求证完毕 */public class Main { public static void main(String[] args) { int a = 0, b =原创 2021-01-22 12:17:27 · 229 阅读 · 0 评论 -
算法4-1.1.24欧几里得算法求最大公约数
给出使用欧几里得算法105和24的最大公约数的过程中得到的一系列p和q的值。扩展算法中的代码得到一个程序Euclid,从命令行接受两个参数,计算它们的最大公约数并打印出每次调用递归方法时的两个参数。使用你的程序计算1 111 111和1 234 567的最大公约数。程序/** * 辗转相除 */public class Main { public static int gcd(int p, int q){ System.out.println(p+","+q);原创 2021-01-22 12:17:17 · 218 阅读 · 0 评论 -
算法4-1.1.23区分在与不在白名单中的值
为BinarySearch的测试用例添加一个参数:+打印出标准输入中不在白名单上的值;-,则打印出标准输入中在白名单上的值。代码public class Main { public static int rank(int[] a, int t, int lo, int hi, int depth){ while (lo <= hi){ int mid = lo + (hi-lo)/2; if (a[mid] < t){原创 2021-01-22 12:17:09 · 225 阅读 · 0 评论 -
算法4-1.1.22以缩进方式打印递归参数
使用1.1.64节中的rank()递归方法重新实现BinaraySearch并跟踪该方法的调用。每当该方法被调用时,打印出它的参数lo和hi并接照递归的深度缩进。提示:为递归方法添加一个参数来保存递归的深度。代码:public class Main { public static int rank(int[] a, int t, int lo, int hi, int depth){ while (lo <= hi){ for (int i = 0原创 2021-01-22 12:17:00 · 222 阅读 · 0 评论 -
算法4-1.1.21打印表格
编写一段程序,从标准输入按行读取数据,其中每行都包含一个名字和两个整数。然后用printf()打印一张表格,每行的若干列数据包括名字、两个整数和第一个整数除以第二个整数的结果,粗确到小数点后三位。可以用这种程序将棒球球手的击球命中率或者学生的考试分数制成表格。代码public class Main { public static void main(String[] args) { System.out.print("Please input count: ");原创 2021-01-22 12:16:52 · 274 阅读 · 0 评论 -
算法4-1.1.20编写一个递归的静态方法计算ln(N!)的值
编写一个递归的静态方法计算ln(N!)的值。代码public class Main { public static double f(int N){ //递归的题目还是要靠递归的方式解决 //递归吧 if (N == 1) return 0; return f(N-1)+Math.log(N); } public static void main(String[] args) { System.out原创 2021-01-22 12:16:40 · 496 阅读 · 0 评论 -
算法4-1.1.19在计算机上运行以下程序
在计算机上运行以下程序:public class Main{ public static long F(int N){ if (N == 0) return 0; if (N == 1) return 1; return F(N-1)+F(N-2); } public static void main(String[] args) { //裴波那切数列 int[] f = new int[100];原创 2021-01-21 00:02:44 · 182 阅读 · 0 评论 -
算法4-1.1.18递归函数在做什么
请看以下递归函数:public static int mystery(int a,int b){if (b0) return 0;if (b%20) return mysetery(a+a,b/2);return mystery(a+a,b/2)+a;}mystery(2,25)和mystery(3,11)的返回值是多少?给定正整数a和b,mystery(a,b)计算的结果是什么?将代码中的+替换为*并将return 0改为return 1,然后回答相同的问题。代码publi原创 2021-01-21 00:02:33 · 299 阅读 · 1 评论 -
算法4-1.1.17找出以下递归函数的问题
找出以下递归函数的问题:public static class String exR2(int n){String s=exR2(n-3)+n+exR2(n-2)+n;if (n<=0) return “”;return s;}代码/** * 这段代码中的基础情况永远不会被访问. 调用exR2(3)会产生调用exR2(0), exR2(-3)和exR2(-6), * 循环往复直到发生stackOverflowError */public class Main { pu原创 2021-01-21 00:02:24 · 162 阅读 · 0 评论 -
算法4-1.1.16给出exR1(6)的返回值
给出exR1(6)的返回值:public static String exR1(int n){if(n<=0) return “”;return exR1(n-3)+n+exR1(n-2)+n;}代码public class Main { public static String exR1(int n){ if (n <= 0){ return ""; } return exR1(n-3)+n+exR1原创 2021-01-21 00:02:14 · 207 阅读 · 0 评论 -
算法4-1.1.15编写一个静态方法histogram()
编写一个静态方法histogram(),接受一个整型数组a[]和一个整数M为参数并返回一个大小为M的数组,其中第i个元素的值为整数i在参数数组中出现的次数。如果a[]中的值均在0到M-1之间,返回数组中所有元素之和应该和a.length相等import edu.princeton.cs.algs4.StdRandom;import java.util.HashMap;import java.util.Map;public class Main { /** * 生成数组原创 2021-01-21 00:02:04 · 321 阅读 · 0 评论 -
算法4-1.1.14实现以2为底的对数
编写一个静态方法lg(),接受一个整型参数N,返回不大于log2N的最大整数。不要使用Math库。//实质上还是求2不超过N的指数倍,其中的指数apublic class Main { public static int lg(int N){ int num = 0; do { N >>=1; num++; }while (N!= 0); //System.out.prin原创 2021-01-21 00:01:47 · 417 阅读 · 0 评论 -
算法4--1.1.13编写一段代码,打印出一个M行N列的二维数组的转置(交换行和列)
编写一段代码,打印出一个M行N列的二维数组的转置(交换行和列)代码/** * 二维数组转置,交换行和列 */public class Main { public static void main(String[] args) { int[][] a = new int[][]{{1,2,3},{4,5,6},{7,8,9},{10,11,12}}; convert(a); } public static void convert(int [原创 2021-01-21 00:01:36 · 670 阅读 · 0 评论 -
算法4-1.1.12以下代码段会打印出什么结果?
以下代码段会打印出什么结果?public class Main { public static void main(String[] args) { int [] a = new int[10]; for (int i = 0; i < 10; i ++){ a[i] = 9-i; } for(int i = 0; i < 10; i ++){ a[i] = a[a[i]];原创 2021-01-21 00:01:27 · 130 阅读 · 0 评论 -
算法4-1.1.11编写一段代码,打印出一个二维布尔数组的内容
编写一段代码,打印出一个二维布尔数组的内容。其中,使用*表示真,空格表示假。打印出行号和列号。代码public class Main { public static void main(String[] args) { boolean[][] a = { { true, false, true }, { false, true, false }, { true, true, false } }; printBooleanMatrix原创 2021-01-21 00:01:09 · 371 阅读 · 0 评论 -
算法4-1.1.10下面这段代码有什么问题
下面这段代码有什么问题?public class Main { public static void main(String[] args) { //他没有用new为a[]分配内存. 这段代码会产生一个 // variable a might not have been initialized的编译编译错误 int[] a; for (int i = 0; i < 10; i ++){ //a[i] =原创 2021-01-21 00:00:57 · 146 阅读 · 0 评论 -
算法4-1.1.9十进制整数转二进制
编写一段代码,将一个正整数N用二进制表示并转换为一个String类型的值s。解答:Java有一个内置方法Integer.toBinaryString(N)专门完成这个任务,但该题的目的就是给出这个方法的基他实现方法。下面就是一个特别简洁的答案:String s="";for (int n=N;n>0;n/=2)s=(n%2)+s;代码/** * 将一个正整数N用二进制表示并转换为一个String类型的值s */public class Main { public stati原创 2021-01-20 16:49:06 · 215 阅读 · 0 评论 -
算法4-1.1.8下列语句会打印出什么结果?给出解释
下列语句会打印出什么结果?给出解释。a.System.out.println(‘b’);b.System.out.println(‘b’+‘c’);c.System.out.println((char)(‘a’+4));代码public class Main { public static void main(String[] args) { //字符 System.out.println('b'); //字符转ASCII码原创 2021-01-20 16:45:13 · 156 阅读 · 0 评论 -
算法4-1.1.7分别给出以下代码段打印的值
分别给出以下代码段打印的值:a.double t=9.0;while (Math.abs(t-9.0/t)>.001)t=(9.0/t+t)/2.0;StdOut.printf("%.5f\n",t);b. int sum=0;for (int i=1;i<1000;i++)for (int j=0;j<i;j++)sum++;StdOut.println(sum);c. int sum=0;for (int i=1;i<1000;i*=2)f原创 2021-01-20 16:43:12 · 211 阅读 · 0 评论 -
算法4-1.1.6下面这段程序会打印出什么
下面这段程序会打印出什么?int f=0;int g=1;for (int i=0;i<=15;i++){StdOut.println(f);f=f+g;g=f-g;}01123581321345589144233377610返回目录原创 2021-01-20 16:40:46 · 169 阅读 · 0 评论 -
算法4-1.1.5位于0与1之间则打印true,否则打印false
编写一段程序,如果double类型的变量x和y都严格位于0与1之间则打印true,否则打印false代码public class Main { public static void main(String[] args) { double x = StdIn.readDouble(); double y = StdIn.readDouble(); System.out.println(x>0 && x< 1 &&原创 2021-01-20 16:38:50 · 233 阅读 · 0 评论 -
算法4-1.1.4下列语句各有什么问题
下列语句各有什么问题(如果有的话)?a.if (a>b) then c=0;b.if a>b {c=0;}c.if (a>b) c=0;d.if (a>b) c=0 else b=0;代码public class Main { public static void main(String[] args) { int a = 1, b = 2, c; if (a > b) if (a>b) a=1; else a=1;原创 2021-01-20 16:37:29 · 139 阅读 · 0 评论 -
算法4--1.1.3参个数是否相等
编写一个程序,从命令行得到三个整参数。如果它们都相等则打印equal,否则打印not equal代码public class Main { public static void main(String[] args) { int a = StdIn.readInt(); int b = StdIn.readInt(); int c = StdIn.readInt(); if (a==b&&a==c){原创 2021-01-20 16:35:54 · 126 阅读 · 0 评论 -
算法4-1.1.2给出以下表达式的类型和值
给出以下表达式的类型和值a.(1+2.236)/2b.1+2+3+4.0c.4.1>=4d.1+2+“3”代码:public class Main { public static void main(String[] args) { //double类型 System.out.println((1+2.236)/2); //单精度浮点型 System.out.println(1+2+3+4.0); //原创 2021-01-20 16:34:05 · 182 阅读 · 0 评论 -
算法4-1.1.1给出下列表达式的值
给出以下表达式的值:a. (0+15)/2b. 2.0e-6*100000000.1c. true && false || true && truepublic class Main { public static void main(String[] args) { //不是四舍五入 System.out.println((0+15)/2); System.out.println(2.0e-6*10000000原创 2021-01-20 16:31:13 · 206 阅读 · 0 评论 -
算法4课后题目录
前言作为一个后端开发自己的算法实在是烂,因此准备把算法四的课后题都刷一遍,由于题目众多,预计整个寒假才能完成目录1.1.11.1.21.1.3原创 2021-01-20 16:21:26 · 237 阅读 · 0 评论 -
2.3 快速排序-算法4
本节的主题是快速排序,他可能是应用最广泛的排序算法了.快速排序引人注目的特点包括他是原地排序(只需要一个很小的辅助栈),且将长度为N的数组排序所需的时间和NlogN成正比.我们已经学习过排序算法都无法将这两个优点结合起来另外快速排序内循环比大多数排序算法都要短小,这意味着他无论是理论上还是实际上都要更快.他的主要缺点是非常脆弱,在实现时需要非常小心才能避开低劣的性能1. 基本算法快速排序算法是一种基于分治的排序算法.他将一个数组分成两个子数组,将两部分独立的排序.快速排序和归并排序是互补的:归并排序原创 2020-07-24 22:23:38 · 276 阅读 · 1 评论 -
2.2归并排序-算法4-20200719
在本节中我们所讨论的算法是基于归并这个简单的操作,即将两个有序的数组归并成一个更大的有序数组.很快人们就根据这个操作发明了一种简单的归并排序的算法:归并排序要将一个数组排序,可以先递归的将他分成两半分别排序,然后将结果归并起来.你将会看到归并排序最吸引人的性质是他能够保证将任意长度为N的数组排序所需的时间和NlogN成正比,缺点是他需要额外空间和N成正比.简单的归并排序如图所示1.原地归并的抽象方法实现归并的一种直截了当的方法是将两个不同的有序数组归并到第三个数组之中,两个数组中的元素都应该是实现了原创 2020-07-20 09:57:14 · 213 阅读 · 0 评论 -
2.1初级排序算法-算法4-20200719
1. 游戏规则我们会将排序代码放在类的sort()方法之中,该类还将包括辅助函数less()和exch()以及一个实例main()大多数情况下,我们的排序代码只会通过两个方法操作数据:less()方法对元素进行比较,exch()方法将元素交换位置.exch()方法的实现很简单,通过Comparable()接口实现less()方法也不困难排序算法的模板类package 排序.初级排序算法;/** * 选择排序 */public class Selection { /** *原创 2020-07-18 16:56:51 · 205 阅读 · 0 评论 -
1.5案例研究: union-find算法-算法4-20200719
1. 动态连通性1.1 动态连通性问题首先我们来详细说明一下问题:问题的输入是一列整数对,其中每个整数都表示一个某种类型的对象,一对整数p和q可以被理解我"p和q是相连的".我们假设"相连"是一种等价关系,这也就意味着它具有:自反性对称性传递性:如果p和q是相连的其q和r是相连的,那么p和r也是相连的等价关系能够将对象分为多个等价类.我们的目标是编写一个程序来过滤掉序列中所有无意义的整数对(两个整数对来自同一个等价类中).换句话说当程序从输入中读取了证书对pq时,如果已知的整数对都不能说明原创 2020-07-18 11:31:23 · 199 阅读 · 0 评论 -
1.1基础编程模型-算法4
Java的基础结构语法:原始数据类型语句 :声明,赋值,条件,循环,调用和返回数组 :数组是多个同种类型值的集合静态方法 :静态方法可以封装和重用代码,使我们可以用独立的模块开发程序字符串 :字符串是一连串的字符,Java内置了对他们的操作标准输入输出 :标准输入输出是程序与外界交流的桥梁数据抽象 : 数据抽象封装和重用代码,使得我们可以定义非原始数据类型,进而支持面向对象编程二分查找法为例package 基础.基础编程模型;//导入Java库import java.util原创 2020-07-12 01:05:20 · 299 阅读 · 0 评论 -
1.3背包,队列和栈-算法四
三种数据类型:背包(Bag),队列(Queue)和栈(Stack).他们的不同在于删除和访问对象的顺序不同目标说明我们对集合中的对象的表示方式将直接影响各种操作的效率介绍泛型和迭代说明链式数据结构的重要性API每份API都含有一个无参数的构造函数,一个向集合中添加单个元素的方法,一个测试集合是否是空的方法和一个返回集合大小的方法.Stack和Queue都含有一个能够删除集合中特定的元素的方法.泛型集合类的一个抽象数据类型的一个关键特性是我们应该可以用他们来存储任意类型的数据.一个特殊原创 2020-07-08 10:47:26 · 323 阅读 · 0 评论 -
算法效率分析基础-算法四
主要内容:介绍研究算法效率的通用框架介绍三种符号: O(读作O),Ω(读作omega),和Θ(读作theta).这些数学借来的符号已经成为讨论算法效率的特定语言使用通用框架系统对非递归算法进行分析.这种分析主要的工具是先定义一个代表算法运行时间的求和表达式,然后使用标准的求和法则对表达式进行化简使用通用架构系统对递归算法进行分析.在这里主要分析工具不是求和,而是一种称之为递推关系的特殊等式,我们会告诉大家如何建立这种递推关系,然后对其介绍一种求解方法.对斐波那契数列进行分析分析框架我们即将原创 2020-07-06 14:31:33 · 2728 阅读 · 1 评论 -
4.1无向图-算法四
基本概念:图的术语一种图的表示方法,能够处理大型而稀疏的图和图处理相关的类的设计模式,其实现算法通过在相关的类的构造函数中对图进行预处理,构造所需的数据结构来高效支持用例对图的查询深度优先搜索和广度优先搜索支持符号作为图的顶点名的类算法实现:定义: 图是一组顶点和一组能够将两个顶点相连的边组成的特殊的图:自环:即一条连接一个顶点和其自身的边平行边:连接同一对顶点的两条边数学家把含有平行边的图称为多重图,而将没有平行边或者自环的图称为简单图.术语表相邻: 当两个顶点通过原创 2020-07-05 12:28:38 · 1619 阅读 · 0 评论