- 博客(277)
- 收藏
- 关注
原创 Java算法--第四章--多维数组和矩阵(6)题目:子矩阵最大累加和
Java算法–第四章–多维数组和矩阵(6)题目:子矩阵最大累加和 给定一个矩阵matrix,其中的值有正、有负、有0,返回子矩阵的最大累加和。 例如,matrix为∶ -1 -1 -1 -1 2 2 -1 -1 -1 其中最大累加和的子矩阵为︰2 2 所以返回4。 代码: package matrix; import java.util.Arrays; public class MaxSubMatrix { public static void main(String[] args) { i
2021-04-17 14:54:30
372
原创 Java算法--第四章--多维数组和矩阵(5)题目:子数组最大累加和
Java算法–第四章–多维数组和矩阵(5)题目:子数组最大累加和 给定一个数组arr,返回子数组的最大累加和 例:arr=[1,-2,3,5,-2,6,-1];所有的子数组中[3,5,-2,6]可以累加出最大的和12,所以返回12 代码: package matrix; public class MaxSumArray { public static void main(String[] args) { int[] arr = { 1, -2, 3, 5, -2, 6, -1 }; int m
2021-04-17 14:30:12
336
原创 Java算法--第四章--多维数组和矩阵(4)题目:边界为1的最大子方阵
Java算法–第四章–多维数组和矩阵(4)题目:边界为1的最大子方阵 给定一个N×N的矩阵matrix,在这个矩阵中,只有O和1两种值,返回边框全是1的最大正方形的边长长度。 例如∶ {0,1,1,1,1}, {0,1,0,0,1}, {0,1,0,0,1}, {0,1,1,1,1}, {0,1,0,1,1} 其中,边框全是1的最大正方形的大小是4*4,返回4 代码: package matrix; public class MaxSquare { public static void main(Str
2021-04-17 13:16:32
403
原创 Java算法--第四章--多维数组和矩阵(3)题目:Z形打印
Java算法–第四章–多维数组和矩阵(3)题目:Z形打印 代码: package matrix; public class PrintZMatrix { public static void main(String[] args) { int[][] matrix = { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 }, { 11, 12, 13, 14, 15 }, { 16, 17, 18, 19, 20 },
2021-04-17 11:48:23
193
原创 Java算法--第四章--多维数组和矩阵(2)题目:0所在得行列清零
Java算法–第四章–多维数组和矩阵(2)题目:0所在得行列清零 如果矩阵中某个元素为0,则将其所在的行和列清零 1 2 3 4 5 6 0 8 9 0 11 12 13 14 15 16 变为: 1 0 0 4 0 0 0 0 0 0 0 0 13 0 0 16 代码: package matrix; import java.util.Arrays; public class ClearZeroInArr { public static void main(String[] args) { in
2021-04-17 10:36:04
137
原创 Java算法--第四章--多维数组和矩阵(1)顺时针打印二维数组
Java算法–第四章–多维数组和矩阵(1)顺时针打印二维数组 代码: package matrix; public class Print20Arr { public static void main(String[] args) { int[][] matrix = { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 }, { 11, 12, 13, 14, 15 }, { 16, 17, 18, 19, 20 }, { 21, 22, 23, 24, 25 }
2021-04-17 10:19:49
413
2
原创 Java算法--第三章--排序(19)题目:数组能排成的最小数(特殊排序)
Java算法–第三章–排序(19)题目:数组能排成的最小数(特殊排序) 1.输入一个正整数数组,把数组里所有整数拼接起来排成一个数,打印出能拼接出的所有数字中最小的一个。 2.例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字为:321323 ...
2021-04-16 20:29:41
165
原创 Java算法--第三章--排序(20)题目:数组的包含
Java算法–第三章–排序(20)题目:数组的包含 输入两个字符串str1和str2,请判断str1中的所有字符是否都存在str2中 代码: package sort; import java.util.Arrays; public class ContainAll { public static boolean check(String s1, String s2) { char[] s2_arr = s2.toCharArray(); Arrays.sort(s2_arr); for
2021-04-16 20:29:27
110
原创 Java算法--第三章--排序(14)概述
Java算法–第三章–排序(14)概述 排序算法的总结: 1.冒泡 谁大谁上,每一轮都把最大的顶到天花板效率太低O(n2)–掌握swap 选择排序,效率较低,但经常用它内部的循环方式来找最大值和最小值–怎么一次性求出数组的最大值和最小值 2.插排 虽然平均效率低,但是在序列基本有序时,它很快,所以也有其适用范围 Arrays这个工具类在1.7里面做了较大改动 3.希尔,是插排的改良,对空间思维训练有帮助 4.快排是软件工业中最常见的常规排序法,其双向指针扫描和分区算法是核心,往往用于解决类似问题,特别地pa
2021-04-15 20:12:20
161
原创 Java算法--第三章--排序(3)归并排序
Java算法–第三章–排序(3)归并排序 1.归并排序Merge Sort)算法完全依照了分治模式 (1)分解:将n个元素分成各含n/2个元素的子序列; (2)解决:对两个子序列递归地排序; (3)合并:合并两个已排序的子序列以得到排序结果 2.和快排不同的是:归并的分解较为随意,重点是合并 代码: package sort; import java.util.Arrays; public class NormalizingSort { public static void main(String[]
2021-04-05 12:56:25
157
1
原创 Java算法--第三章--排序(1)分治法
Java算法–第三章–排序(1)分治法 一、分治法 1.分治法(divide and conquer, D&C)︰将原问题划分成若干个规模较小而结构与原问题一致的子问题﹔递归地解决这些子问题,然后再合并其结果,就得到原问题的解。 2.容易确定运行时间,是分治算法的优点之一。 3.分治模式在每一层递归上都有三个步骤 (1)分解(Divide) :将原问题分解成一系列子问题; (2)解决(Conquer):递归地解各子问题。若子问题足够小,则直接有解; (3)合并(combine):将子问题的结果合并成
2021-04-03 18:46:24
285
1
原创 Java算法--第二章--查找与排序(10)题目:涉及一个高效的求a的n次幂的算法
Java算法–第二章–查找与排序(10)题目:涉及一个高效的求a的n次幂的算法
2021-04-03 15:50:46
126
原创 Java算法--第二章--查找与排序(8)题目:在有空字符穿的有序字符串数组中查找
Java算法–第二章–查找与排序(8)题目:在有空字符穿的有序字符串数组中查找 题目:有个排序后的字符串数组,其中散布着一些空字符串,编写一个方法,找出给定字符串(肯定不是空字符串)的索引。 ...
2021-04-03 14:30:08
210
1
原创 Java算法--第二章--查找与排序(7)题目:旋转数组的最小数字(改造二分法)
Java算法–第二章–查找与排序(7)题目:旋转数组的最小数字(改造二分法) 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. 代码: package section02; public class 旋转数组的最小数字 { public static void main(String[] args) { int[] arr = { 5
2021-03-31 16:10:08
146
原创 Java算法--第二章--查找与排序(6)题目:小白上楼梯(递归)
Java算法–第二章–查找与排序(6)题目:小白上楼梯(递归) 题目:小白正在上楼梯,楼梯有n阶台阶,小白一次可以上1阶,2阶或者3阶,实现一个方法,计算小白有多少种走完楼梯的方式? 代码: package section02; import java.util.Scanner; public class 小白上楼梯 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = s
2021-03-31 15:54:28
140
原创 Java算法--第二章--查找与排序(4)希尔排序
Java算法–第二章–查找与排序(4)希尔排序 希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序 思路:如序列 9 8 7 6 5 4 3 2 1 1.确定一个增量序列,如:4(length/2) 2 1,从大到小使用增量 2.使用第一个增量,将序列化分为若干个子序列,下标组合为0-4-8,1-5,2-6,3-7 3.以此对子序列使用过直接插入排序法 4.使用第二个增量,将序列华为若干个子序列(0-2-4-6-8),(1-3-5-7) 5.以此对子序列使用这季节插
2021-03-29 20:22:38
135
原创 Java算法--第二章--查找与排序(3)二分法查找递归方法
Java算法–第二章–查找与排序(3)二分法查找递归方法 全范围的二分查找 等价于三个子问题: 1.左边找(递归) 2.中间比 3.右边找(递归) 注意:前提是所查找的内容必须是有序的,且左边和右边查找只取其中的一个分支 代码: package section02; public class 二分法查找 { public static void main(String[] args) { int[] arr = new int[] { -98, -34, 2, 34, 54, 66, 79, 105
2021-03-28 14:12:01
157
原创 Java算法--第二章--查找与排序(1)递归基础
Java算法–第二章–查找与排序(1)递归基础 1.阶乘 2.打印i-j 3.对arr的所有元素求和 4.反转字符串 package section02; public class java1 { public static void main(String[] args) { } /* * 阶乘: * 找重复:n*(n-1)的阶乘,求n-1的阶乘是原问题的重复(规模更小)----子问题 * 找变化:变化的量应该作为参数 * 找边界:出口 */ static int
2021-03-24 16:53:51
116
原创 Java算法--第一章--位运算符(8)出现k次与出现1次
Java算法–第一章–位运算符(8)出现k次与出现1次 题目:数组中只有一个数出现了1次,其他的数都出现了k次,请输出只出现了1次的数。 补充知识点:(1)2个相同的二进制数做不进位加法,结果为零; (2)10个相同的十进制数做不进位加法,结果位零; (3)k个相同的k进制数做不进制加法,结果为零 代码: package exer1; public class 出现k次和出现1次 { public static void main(String[] args) { int[] ar
2021-03-22 20:03:04
309
原创 Java算法--第一章--位运算符(7)0~1间浮点实数的二进制表示
Java算法–第一章–位运算符(7)0~1间浮点实数的二进制表示 题目:给定一个介于0和1之间的实数,(如0.625),类型为double,打印他的二进制表示(0.101,因为小数点后的二进制分别表示0.5,0.25,0.125……)。 如果该数字无法精确的用32位以内的二进制表示,则打印“ERROR” 代码: package exer1; public class 零一间浮点实数的二进制表示 { public static void main(String[] args) { d
2021-03-22 19:16:56
150
原创 Java算法--第一章--位运算符(6)将整数的奇偶位互换
Java算法–第一章–位运算符(6)将整数的奇偶位互换 题目:将一个数的二进制形式中,奇偶位互换,得出新的一个数
2021-03-22 18:52:51
265
原创 Java算法--第一章--位运算符(5)是不是2的整数次方
Java算法–第一章–位运算符(5)是不是2的整数次方 题目:用一条语句判断一个整数是不是2的整数次方 (本方法:除2判断。。。) 提示:2的整数次方在二进制中只有1个1 代码 : package exer1; import java.util.Scanner; public class 是不是2的整数次方 { public static void main(String[] args) { Scanner sc = new Scanner(System.in);
2021-03-21 20:09:30
120
原创 Java算法--第一章--位运算符(4)二进制中1的个数
Java算法–第一章–位运算符(4)二进制中1的个数 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。 例:9的二进制表示为1001,有2位是1. 方法1: package exer1; import java.util.Scanner; public class 二进制中1的个数 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int
2021-03-21 20:01:57
131
原创 Java算法--第一章--位运算符(2)唯一成对的数
题目:1-1000这1000个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法,把它找出来;不用辅助存储空间,能否设计一个算法实现? (写的代码过于粗糙,还有很多地方有待改善……) 代码: package exer1; import java.util.Random; public class 唯一成对的数 { public static void main(String[] args) { int N = 6;
2021-03-21 17:45:40
196
原创 15-7 反射 ---- 反射的应用:动态代理(3)AOP与动态代理的举例
15-7 反射 ---- 反射的应用:动态代理(3)AOP与动态代理的举例 代码: package java4; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; //动态代理举例 interface Human { String getBelif(); void eat(String food); } //被代
2021-02-25 14:28:55
122
1
原创 15-7 反射 ---- 反射的应用:动态代理(2)举例②动态代理
15-7 反射 ---- 反射的应用:动态代理(2)举例②动态代理 代码: package java4; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; //动态代理举例 interface Human { String getBelif(); void eat(String food); } //被代理类 c
2021-02-25 14:28:51
87
1
原创 15-7 反射 ---- 反射的应用:动态代理(2)举例①静态代理
15-7 反射 ---- 反射的应用:动态代理(2)举例①静态代理 代码: package java4; //静态代理举例 //代理类和被代理类在编译期间,就确定下来了 interface ClothFactory{ void produceCloth(); } //代理类 class ProxyClothFactory implements ClothFactory{ private ClothFactory factory;//用被代理类对象进行实例化 public P
2021-02-25 14:28:47
129
原创 15-7 反射 ---- 反射的应用:动态代理(1)概述
15-7 反射 ---- 反射的应用:动态代理(1)概述 一、代理设计模式 1.原理:使用一个代理将对象包装起来, 然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。 2.之前为大家讲解过代理机制的操作,属于静态代理,特征是代理类和目标对象的类都是在编译期间确定下来,不利于程序的扩展。同时,每一个代理类只能为一个接口服务,这样一来程序开发中必然产生过多的代理。最好可以通过一个代理类完成全部的代理功能。 3.动态代理是指客户通过代理类来调用其它对
2021-02-25 14:28:39
108
1
原创 15-6 反射 ---- 调用运行时类的指定结构
15-6 反射 ---- 调用运行时类的指定结构 一、调用指定方法 通过反射,调用类中的方法,通过Method类完成。步骤: 1.通过Class类的getMethod(String name,Class…parameterTypes)方法取得一个Method对象,并设置此方法操作时所需要的参数类型。 2.之后使用**Object invoke(Object obj, Object[] args)**进行调用,并向方法中传递要设置的obj对象的参数信息。 二、Object invoke(Object obj
2021-02-24 21:12:41
99
原创 15-5 反射 ---- 获取运行时类的完整结构(1)概述
15-5 反射 ---- 获取运行时类的完整结构(1)概述 使用反射可以取得: 1.实现的全部接口:public Class<?>[] getInterfaces() 确定此对象所表示的类或接口实现的接口。 2.所继承的父类:public Class<? Super T> getSuperclass() 返回表示此 Class 所表示的实体(类、接口、基本类型)的父类的Class。 3.全部的构造器 (1)public Constructor< T >[] getCons
2021-02-24 17:49:41
95
原创 15-5 反射 ---- 获取运行时类的完整结构(2)获得当前运行时类的③其他
15-5 反射 ---- 获取运行时类的完整结构(2)获得当前运行时类的③其他 1.构造器 2.父类 3.带泛型的父类 4.父类的泛型 5.接口 6.所在的包 7.注解 代码: package java3; import java2.Person; import org.junit.Test; import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; import java.lang.reflect.Par
2021-02-24 17:49:35
77
原创 15-5 反射 ---- 获取运行时类的完整结构(2)获得当前运行时类的②方法结构
15-5 反射 ---- 获取运行时类的完整结构(2)获得当前运行时类的②方法结构 代码: package java3; import java2.Person; import org.junit.Test; import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.lang.reflect.Modifier; //获取运行时类的方法结构 public class MethodTest {
2021-02-24 17:49:20
91
原创 15-5 反射 ---- 获取运行时类的完整结构(2)获得当前运行时类的①属性结构
15-5 反射 ---- 获取运行时类的完整结构(2)获得当前运行时的①属性结构 代码: package java3; import java2.Person; import org.junit.Test; import java.lang.reflect.Field; import java.lang.reflect.Modifier; //获得当前运行时的属性结构 public class FieldTest { @Test public void test1() {
2021-02-24 17:49:13
95
原创 15-4 反射 ---- 创建运行时类的对象 & 体会反射的动态性
15-4 反射 ---- 创建运行时类的对象 & 体会反射的动态性 一、newInstance(): 1.调用此方法,创建对应的运行时类的对象。内部调用了运行时类的空参的构造器。 2.要想此方法正常的创建运行时类的对象,调用Class对象的newInstance()方法,要求: (1)运行时类必须提供空参的构造器 (2)空参的构造器的访问权限得够。通常,设置为public。 3.在javabean中要求提供一个public的空参构造器。原因: (1)便于通过反射,创建运行时类的对象 (2)便于子类继
2021-02-24 17:49:08
143
原创 15-3 反射 ---- 类的加载 与ClassLoader的理解(3)使用ClassLoader加载配置文件
15-3 反射 ---- 类的加载 与ClassLoader的理解(3)使用ClassLoader加载配置文件 代码: package java1; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class ClassLoaderTest { //Properties:用来读取配置文件 @Test
2021-02-24 17:49:02
211
原创 15-3 反射 ---- 类的加载 与ClassLoader的理解(2)ClassLoader
15-2 反射 ---- 类的加载 与ClassLoader的理解(2)ClassLoader 一、了解:ClassLoader 类加载器作用是用来把类(class)装载进内存的。 JVM 规范定义了如下类型的类的加载器。 二、 • //1.获取一个系统类加载器 • ClassLoader classloader = ClassLoader.getSystemClassLoader(); • System.out.println(classloader); • //2.获取系统类加载器的父类加载器,即扩展
2021-02-24 17:48:58
148
原创 15-3 反射 ---- 类的加载 与ClassLoader的理解(1)类的加载
15-2 反射 ---- 类的加载 与ClassLoader的理解(1)类的加载 一、了解:类的加载过程 当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过如下三个步骤来对该类进行初始化。 1.加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象,作为方法区中类数据的访问入口(即引用地址)。所有需要访问和使用类数据只能通过这个Class对象。这个加载的过程需要类加载器参与。 2.链接:将Java
2021-02-23 21:04:17
137
原创 15-2 反射 ---- 理解Class类并 获取Class的实例
15-2 反射 ---- 理解Class类并 获取Class的实例 一、Class 类 : 在Object类中定义了以下的方法,此方法将被所有子类继承: 1.public final Class getClass() 以上的方法返回值的类型是一个Class类,此类是Java反射的源头,实际上所谓反射从程序的运行结果来看也很好理解,即:可以通过对象反射求出类的名称。 2.象照镜子后可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE 都为其保留一个不变的 Class 类
2021-02-23 21:04:11
285
原创 15-1 反射 ---- Java反射机制概述
15-1 反射 ---- Java反射机制概述 一、Java Reflection 1.Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。 2.加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。
2021-02-23 21:04:06
123
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅