随笔分类 - 数据结构与算法
摘要:package demo2; import java.awt.print.Printable; import java.util.Arrays; import java.util.Scanner; public class P115 { //dfs例题,9*9数独填空问题 //思路:填之前检查,顺利
阅读全文
摘要:package demo2; import java.util.ArrayList; import java.util.Arrays; public class P110 { //给出一个整型集合,求所有非空子集 //思路:从空集开始考虑所有子集,每次多考虑1个元素,所有子集都可以产生加入/不加入两
阅读全文
摘要: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; 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 P73 { //字符串统计,例如输入"aaabbffff"返回"a3b2f4" public static void main(String[] args) { String src = "aaabbffff"; StringBuilder re
阅读全文
摘要: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
阅读全文