05 2022 档案
摘要:package demo; import java.io.IOException; import java.io.InputStream; public class SystemIODemo { public static void main(String[] args) throws IOExce
阅读全文
摘要:package demo; import java.io.File; import java.io.FileNotFoundException; import java.io.RandomAccessFile; public class RandomAccessFileDemo { public s
阅读全文
摘要:package demo; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Scanner; public class ScannerDemo { public static v
阅读全文
摘要:package demo; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PipedInputStream;
阅读全文
摘要:package demo; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintWriter; public class Pri
阅读全文
摘要:package demo; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; im
阅读全文
摘要:package learning; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j
阅读全文
摘要:package learning; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.File
阅读全文
摘要:package learning; import java.io.File; public class FileDemo { //File类,用于操作文件对象。练习: //列出给定目录中全部文件,包括子目录中的文件 //批量修改给定目录下的文件后缀,如改为.txt public static voi
阅读全文
摘要:package demo2; import java.util.ArrayList; import java.util.Arrays; public class P110 { //给出一个整型集合,求所有非空子集 //思路:从空集开始考虑所有子集,每次多考虑1个元素,所有子集都可以产生加入/不加入两
阅读全文
摘要:package demo2; import java.awt.print.Printable; import java.util.Arrays; import java.util.Scanner; public class P115 { //dfs例题,9*9数独填空问题 //思路:填之前检查,顺利
阅读全文
摘要:package demo2; public class P107 { //硬币凑整问题,有1/5/10/25元 四种面值的硬币,要凑出n元共有多少种组合 //思路:为了有序不遗漏,先从大面值硬币开始考虑,例如凑出50元可以考虑 //取25*2 或 25*1 或 25*0 //再考虑还要凑多少元,取几
阅读全文
摘要:package demo2; import java.util.Scanner; public class P106 { //机器人走格子,每次向右1格/向下1格,问从x行y列的左上角走到右下角 有多少种走法 //思路:从当前起点 // 向右一格,则之后的走法数量等同x行(y-1)列的情况 // 向
阅读全文
摘要:package demo2; import java.util.Arrays; import java.util.Scanner; public class P124 { //区间调度问题,例如同时只能做一件工作(结束和开始瞬间重合也不行),问互相冲突的工作中最多能做几件 //思路:贪心策略,每次取
阅读全文
摘要:package demo2; public class P96 { //对任意整数a、b和它们的gcd //当且仅当m为gcd的整数倍时,ax+by=m(贝祖公式)有整数解 //要求给出其中一组解 //原理:不妨先算ax+by=gcd,用辗转相除法求a、b的gcd, //则化到最后a2=gcd,b2
阅读全文
摘要:package demo2; public class P95 { //欧几里得算法,即辗转相除法 //一种变体是找线段上的格点数 public static void main(String[] args) { //(1,11)和(5,3)两点间的线段 int x1=1; int y1=11; i
阅读全文
摘要:package demo2; public class P88 { //同一段字符重复出现组成的字符串,求段长度和重复次数 //失配位置i就是检查范围的后一位,跳转位置k就是最后一段的首位,(i-k)也就是段长度 public static void main(String[] args) { St
阅读全文
摘要:package demo2; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class P91 { //有1g,3g,9g...等3的指数幂重量的砝码各一个,要求用天平称出任意整
阅读全文
摘要:package demo2; public class P83 { //KMP算法 //思路:减少回退。 //主串s,模式串p;指针i、j分别指向s、p来比较。 //假设有两个模式串,p1在j失配,说明前面0~(j-1)与s相同,这段中p1的后缀与p2的前缀重合部分免检(这部分p2等于p1等于s)。
阅读全文
摘要:package demo2; public class P81 { //用滚动哈希值(指利用之前的值),找字符串匹配 public static void main(String[] args) { String s="abcbbcabc"; //依次为主串、模式串 String p="bc"; l
阅读全文
摘要:package demo; public class P77 { //去除字符串中连续的k个'0' public static void main(String[] args) { String src="A0B000C0F"; int k=3; System.out.println(delete0
阅读全文
摘要:package demo; public class P79 { //要求找到文章最短摘要,就是包含所有关键词的最短语句 //思路:尺取法。 i指向当下第一个关键词,j指向使得集齐的最后一个关键词。 // public static void main(String[] args) { String
阅读全文
摘要:package demo; public class P73 { //字符串统计,例如输入"aaabbffff"返回"a3b2f4" public static void main(String[] args) { String src = "aaabbffff"; StringBuilder re
阅读全文
摘要:package demo; import java.util.HashMap; import java.util.Map; public class P74 { //要求检查2个字符串,s1是否完全包含s2的字符集 public static void main(String[] args) { S
阅读全文
摘要:package demo; public class P66 { //要求找到累加和最大的子数组(连续),返回最大累加和 //递推法:从左向右扫描,同时记录当前子数组的累加和arrSum、当前最大累加和maxSum。 //如果arrSum<0,说明这部分产生负面作用,所以舍弃、重新开子数组。否则继续
阅读全文
摘要:package demo; import java.util.Arrays; public class P54 { //乱序数组,计算需要排序的最小范围,使得数组变为增序 //思路:扫描两轮,分别确定左、右端点。 //从左往右,却出现(相对于历史高点的)下折,要移动右端点;同理,确定左端点。 pub
阅读全文
摘要:package demo; public class P63 { //要求在值为0或1、N*N的矩阵中,找到最大的1构成的正方形边框,并返回边长 public static void main(String[] args) { int[][] arr= { {0,0,1,0}, {0,1,1,0},
阅读全文
摘要:package demo; public class P51 { //基数排序 //思路:数组中最大值位数为k,从个位开始往高位进行k轮(桶排序+填回原数组),每轮以那一位的数字为分桶的依据 public static void main(String[] args) { int[] a = {49
阅读全文
摘要:package demo; import java.util.Arrays; public class P49 { //计数排序 //思路为用辅助空间下标对应元素值,下标放的值对应元素出现次数。然后遍历辅助空间,就能有序填回原来数组。 //适用于数据密集并且峰值较小的数组,否则会浪费很多空间 pub
阅读全文
摘要:package demo; import java.util.Arrays; public class P47 { //堆必定是完全二叉树,小顶堆任意父节点小于等于其子节点,大顶堆则是大于等于 //堆排序(以小顶堆为例,用大顶堆结果才是递增) 分为两步:堆化、按序输出 //堆化:从倒数第二行有子节点
阅读全文
摘要:package demo; public class P45 { //完全二叉树的先根、中根、后根遍历 static void preOrder(int[] arr,int index){ if(index>=arr.length) return; System.out.print(arr[inde
阅读全文
摘要:package demo; public class P43 { //乱序整型数组,元素为在用的id(从1开始),求最小空余可用id //思路1:创建(length+1)数组,下标对应id,id<=length且用过则值设为1 //思路2:用分区法,不断二分。如果下标+1==id,说明左区和mid都
阅读全文
摘要:package demo; public class P40 { //乱序数组,有一个数字个数超过数组的一半,求该数字 //思路:不同数字抵消次数的最后结果,或者分区找第(length/2)小的数字 //变种:出现次数为总数一半 //思路:分为目标是最后一个/不是的情况,对最后一个数出现次数计数。
阅读全文
摘要:package demo; import java.util.Arrays; public class P37 { //归并排序,重点在于子问题合并 //思路:辅助空间拷贝整个数组,左区开头、右区开头各有一个指针,比较后较小的值放回原数组,对应指针和原数组指针右移。 public static vo
阅读全文
摘要:package demo; public class P39 { //找出乱序数组中第k小的数字 //思路:利用快排中的分区方法,下标为a-1的主元就是第a小的数字,比较a和k,再到k在的那一边用分区找 //这样比快排更优,因为分区过程中排除了没用的部分 public static void mai
阅读全文
摘要:package demo; public class P30 { //设计求a的n次方的算法 //用a*a、a平方*a平方、a的四次方*a的四次方的速度逼近;剩下的次数用递归计算 public static void main(String[] args) { System.out.println(
阅读全文
摘要:package demo; import java.util.Arrays; public class P33 { //快速排序属于分治法的一种。 //思路:分解时确保主元左边都小于等于主元、右边都大于主元。然后递归地对左边、右边再进行排序。最后结果不用再合并。 public static void
阅读全文
摘要:package demo; public class P28 { //一个有序字符串数组,其中散布着空字符串。编写程序,求指定字符串的索引 //因为字符串有序,所以采用二分法思路,规定中点为空串时右移 public static void main(String[] args) { String[]
阅读全文
摘要:package demo; import java.util.Scanner; public class P26 { //上n阶楼梯,每次走1/2/3步,计算多少种走法 //从终点开始倒推,最后一次走可能从n-1/n-2/n-3阶走上来,f(n)=f(n-1)+f(n-2)+f(n-3), publ
阅读全文
摘要:package demo; public class P13 { public static void main(String[] args) { System.out.println(fib(5)); } //求斐波那契数列的第n个数字 static int fib(int n) { if(n==
阅读全文
摘要:package demo; public class P3q1 { public static void main(String[] args) { int a=5; int b=10; System.out.println("[a]"+a+"[b]"+b); //三次异或,交换a、b的值 a=a^
阅读全文
摘要:package demo; class Validator{ public static boolean validateIP(String ip) { if(ip==null || "".equals(ip)) { return false; } String regex = "([12]?[0-
阅读全文
摘要:package packageA; interface ILink<A> { public void add(A data); // 增加节点 public int getLength(); // 获取节点个数 public boolean isEmpty(); // 判断链表是否为空 public
阅读全文
摘要:package demo; import java.util.Arrays; class Person implements Comparable<Person>{ //实现Comparable接口 private String name; private int age; public Perso
阅读全文
摘要:package demo; import java.util.Optional; import java.util.UUID; interface IMessage{ public String getContent(); } class MessageImpl implements IMessag
阅读全文
摘要:package demo; class Message{ private String info; public void setInfo(String info) { this.info = info; } public String getInfo() { return info; } } cl
阅读全文
摘要:package demo; import java.util.Base64; public class Base64Demo { public static void main(String[] args) { String msg = "fighterk"; System.out.println(
阅读全文
摘要:String可以和各种数据类型相互转换,并且提供许多字符串处理方法,实用性很强。所以项目中,用户输入的信息基本都用String表示。 为了确保信息格式的正确,通过正则表达式进行验证。 常用正则标记,参考https://developer.aliyun.com/lesson_1012_9003?spm
阅读全文
摘要:同一个程序要推广到不同国家,就要显示对应区域的语言。解决方案是,每个国家有自己的区域编码,区域编码映射到对应语言的资源包。相关类有Locale,ResourceBundle 另外,常见一种情况,要显示固定格式的文本,并且对部分内容进行填充。相关类有MessageFormat 读取资源文件的顺序:指定
阅读全文
摘要:要求3个线程进行抢答,并返回抢答结果。 package ThreadDemo; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurr
阅读全文
摘要:StringBuffer类(是线程安全的,而StringBuilder类非线程安全的):String对象不能修改,可以用StringBuffer类来应对频繁修改的情况(需要正常实例化)。append加到字符串末尾("+"编译后就是append),toString返回字符串内容,insert(int
阅读全文
摘要:Date类,实质上是对代表时间的long数据各种处理的封装。常用的有无参构造获取当前时间,接收long数据单参构造,getTime()返回long数据。 DateFormat继承Format,SimpleDateFormat继承DateFormat。SimpleDateFormat类可以通过构造方法
阅读全文
摘要:守护线程围绕在用户线程周围,随着用户线程结束而结束。JVM中最大的守护线程是GC(垃圾回收)线程,在程序运行时进行垃圾回收。 设为守护线程setDaemon(boolean on) , 判断是否为守护线程isDaemon() volatile和synchronized的区别: volatile关键字
阅读全文
摘要:构造方法加String命名线程,currentThread获取当前线程,setName设线程名,getName获取线程名。 sleep(毫秒数)线程休眠(暂缓执行),isInterrupted判断是否被中断,interrupt中断线程,join线程强制执行。 yield线程礼让(礼让一次),setP
阅读全文
摘要:概念看操作系统课本。 可以用关键字synchronized锁实现线程同步,常用于修饰方法: 作用于当前对象上锁,确保独占资源被互斥地访问。更多用法、格式参考文章https://www.cnblogs.com/three-fighter/p/14396208.html
阅读全文
摘要:Object类的方法:等待wait() , 唤醒队首线程notify() , 唤醒全部等待线程notifyAll()。利用等待和唤醒实现Producer线程、Consumer线程的互斥访问Message对象。 代码如下: package ThreadDemo; class Message { pri
阅读全文
摘要:继承java.lang.Thread的类,成为多线程的主体类(Thread implements Runnable)。通过覆写run方法实现功能,通过调用start启动。 常用Runnable接口实现多线程(避免单继承的局限):覆写接口的run方法,然后将接口对象作为Thread构造方法参数,用Th
阅读全文