自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 收藏
  • 关注

原创 编译原理课设---表驱动 LL(1)语法分析程序

该项目为燕山大学编译原理课设项目项目完成任务通过程序实现了 LL(1)文法的分析过程并且通过界面的形式展现了出来,包括打开文法,生成文法的 FIRST 集合、FOLLOW 集合、SELECT 集合,生成预测分析表,以及对含有左公因子的文法进行左公因子提取,适用于不同的文法并能判断该文法是否为 LL(1)文法,可以输入任意符号串并对该输入串分析,判断该串是否为文法的句子并输出分析过程。技术路线本程序使用过使用可视化开发工具 Qt Creator 进行开发的。使用的语言为C++语言,因为考虑到在求一些

2021-09-06 19:20:35 4982

原创 基于QT的分页管理系统页面置换算法设计与实现

简介本项目使用qt实现了分页管理系统页面置换算法中的FIFO、LRU、LUF、OPT四种算法,通过采用多线程的方式,实现了四种算法的动态并发执行。项目截图设置界面置换展示界面项目视频 基于qt的分页管理系统页面置换算法设计与实现 项目视频链接...

2021-09-06 19:17:06 867

原创 基于seetaface的商场人脸支付系统

简介该项目是基于基于seetaface的商场人脸支付系统,操作系统环境为Ubuntu18.04,客户端以及Qt进行开发,使用mysql进行数据的存储,通过使用多线程初步解决了在人脸识别时的卡顿问题。项目截图主界面添加会员功能会员管理功能商品管理功能人脸支付功能项目视频展示 基于seetaface的人脸识别项目 ...

2021-09-06 14:57:10 319

原创 自定义非负求余运算

自定义非负求余运算在解决共余问题时,我们通常需要将余数转换为非负数,下面给出非负求余运算公式//非负求余公式 int getMod(int a,int n){ return (a%n+n)%n;}基本思想是将负数的余数可以转换成其对应的正数的补数。...

2021-02-22 12:54:33 182

原创 洛谷P1433 吃奶酪--Java解法(货郎担问题)

洛谷P1433 吃奶酪–Java解法(货郎担问题)题目链接解决思想本题目是一个典型的货郎担问题,即从(0,0)点出发,所有点仅经过依次(我们可以用反证法证明如果有一个点经过两次其路径一定比每个点经过依次长),求我们走过路程的最小值。 对于此题目,因为时间要求比较高,这迫使我们必须使用动态规划而不能用递归搜索去解决此问题。所以我们应该使用状态压缩的动态规划解决此题目,下面仅给出代码实现。代码实现import java.io.*;import java.util.Arrays;public cla

2021-02-16 23:00:26 359

原创 Leetcode518. 零钱兑换 II--动态规划种排列数与组合数的个人愚见

Leetcode518. 零钱兑换 II–动态规划种排列数与组合数的个人愚见题目链接题目描述给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入: amount = 3, coins = [2]输出: 0解释: 只用面额2的硬

2021-02-12 13:10:56 174

原创 Leetcode992. K 个不同整数的子数组

Leetcode992. K 个不同整数的子数组题目链接通过查看官方题解发现,此题目的核心在于将问题从恰好转化为最多,在这里我说一下对转换的理解。首先说一下从关于最多的理解,最多K个包含1–K个恰好的总和,我是这样理解的,当我们计算出来最多包含K个不同整数的子区间个数时恰好包含1个不同整数的子区间个数在所求的结果,同理2个、3个…K个也是如此。这就类似于选人问题,我们假设有n个人,我们从中最多选k个人,问有多少种选法,其答案是选1个人选法、2个人选法…k个人选法的和。因此,最多其实是包含了最多到最少

2021-02-10 22:34:20 104

原创 当前序列的下一个序列(字典序算法)Java实现

当前序列的下一个序列(字典序算法)Java实现基本思路:首先说明一下,本人认为这是一种基于贪心的实现策略,思想主要分三部。1,从后向前查看逆序区域,找到逆序区域的前一位,也就是数字置换的界界。2.让逆序区域的前一位和逆序区域中大于它的最小的数字交换位置。3.把原来的逆序区域转为顺序状态。代码实现static public void next_permutation(){ int i=n-1; while(res[i-1]>=res[i]) { i--; } i--

2021-02-10 22:21:23 366

原创 扩展欧几里得算法Java实现

扩展欧几里得算法Java实现相对于c++来说,Java没有引入传递,因此需要我们手写一个交换函数即可。代码描述:class E_gcd{ int e_gcd(int a,int b) { if(b==0) { x=1; y=0; return a; } int gcd=e_gcd(b,a%b); swapXY(); //x y进行互换以保证结果正确 y-=a/b*x; return gcd; } void swapXY() { in

2021-02-05 14:34:12 694 1

原创 欧几里得算法(辗转相除法)--Java实现

欧几里得算法(辗转相除法)–Java实现版本一、非递归版本 static int gcd(int a,int b) { while(a%b!=0) { int tem=b; b=a%b; a=tem; } return b; }版本二、递归解法 static int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); }...

2021-02-05 10:55:14 433

原创 组合数计算的几种方法

组合数计算的几种方法方法一、公式法(此方法适合n和m都很小时使用)公式:C(n,m)=C(n-1,m)+C(n-1,m-1)我们在进行计算时可以采用动态规划的方法代码描述: static long C(int n,int m) { long[] res=new long[m+1]; Arrays.fill(res, 1); for(int i=0;i<=n;i++) { for(int j=Math.min(i, m);j>=0;j--) { if(j==0

2021-02-04 23:19:33 4853

原创 Leetcode 295. 数据流的中位数

Leetcode 295. 数据流的中位数题目链接思路语言描述对于求解一个数组中的中位数,比较简单的是每次插入一个数据就数组进行排序,然后求解中位数即可。很显然,这种操作时间复杂度过高,不是题目的想要的解法。所以,我们有必要找到一个更好的数据结构让中位数的查找更加快速,堆在此时的作用便显示了出来。至于具体实现,我们可以设置两个堆,一个大顶堆用来存储前一半元素,一个大顶堆用来存储后一半元素。中位数即为前一半元素的堆顶或者前一半元素的堆顶和后一半元素的堆顶的平局值。然后我们考虑的是如何保持两个堆的平

2021-02-04 12:15:55 83

原创 洛谷P2392 kkksc03考前临时抱佛脚--Java解法

洛谷P2392 kkksc03考前临时抱佛脚–Java解法题目链接题目描述略解题思路语言描述个人认为本题目题意比较清晰,我们只需分别求得做每一科目的所需的最短时间,然后4科最短时间加起来即为我们需要的答案。对于求每一科目的最短时间,我们可以将问题转化成0-1背包问题,这科所有题目时间和的一半即为背包的容量,而每个题解需要的时间即为物品,然后我们遍历所有物品之后能让背包中装的物品的东西体积(时间)尽可能的多即可,然后总时间减去最大时间即为我们这科做完的最短时间。代码描述import java

2021-02-03 22:48:51 439

原创 Leetcode70爬楼梯---两种解法

Leetcode70爬楼梯—两种解法题目链接题目题目描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例示例1输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例2输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶解题思路

2021-02-03 22:36:27 140

原创 生成区间a-b的回文数

生成区间a-b的回文数描述:给定区间a-b生成区间内的所有回文数(不考虑数据溢出)代码ArrayList<Integer> HuiwenNum(int a,int b){ int lowBit=(int)Math.log10(a)+1; int highBit=(int)Math.log10(b)+1; ArrayList<Integer> res=new ArrayList<Integer>(); //生成长度为len的回文质数 for(int

2021-02-03 12:22:35 294

原创 P1217 [USACO1.5]回文质数 Prime Palindromes--java中规中矩解法

P1217 [USACO1.5]回文质数 Prime Palindromes题目链接题目题目描述因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。写一个程序来找出范围 [a,b] (5≤a<b≤100,000,000)( 一亿)间的所有回文质数。输入格式第 1 行: 两个整数 a 和 b .输出格式输出一个回文质数的列表,一行一个。输入输出样例输入5 500输出571110113115118119

2021-02-03 12:16:28 352

原创 洛谷P1088 [NOIP2004 普及组] 火星人-Java朴素解法

import java.io.;import java.util.;public class Main {public static void main(String[] args) throws IOException {BufferedReader br=new BufferedReader(new InputStreamReader(System.in));StreamTokenizer st=new StreamTokenizer(br);PrintWriter pr=new Print

2021-02-01 14:59:50 559

原创 洛谷 P1706 全排列问题Java

洛谷 P1706 全排列问题题目链接题目描述输出自然数 1 到 nn 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。输入格式一个整数 n。输出格式由1∼n 组成的所有不重复的数字序列,每行一个序列。每个数字保留 5 个场宽。输入输出样例输入3输出 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2

2021-02-01 12:53:32 294

原创 Leetcode5666、回文串分割 IV--动态规划

Leetcode5666、回文串分割 IV–动态规划题目链接基本思路这个是一个简单的使用两次动态规划的问题,第一次动态规划是判断任意一段区间的字符串是否为回文。第二次使用动态规划是判断是否能分成三个回文,其中该处的状态包括是否能分成一个回文,是否能分成两个回文,是否能分成三个回文。代码class Solution { public boolean checkPartitioning(String s) { int n=s.length(); char[] s

2021-01-31 22:53:45 93

原创 Java中double类型输出小数点后两位

Java中double类型输出小数点后两位思路就是在输出的时候使用字符串格式即可。 double testNum=1.123456789; System.out.println(String.format("%.3f", testNum));

2021-01-31 22:14:07 3045

原创 洛谷 帮贡排序

洛谷 帮贡排序题目链接解题思路题目描述内容过多,注意读懂,然后做几个排序即可。代码描述import java.util.*;public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); String s1="BangZhu"; String s2="FuBangZhu"; String s3="HuFa";

2021-01-31 09:46:13 161

原创 洛谷 统计方形

洛谷 统计方形题目链接题目背景1997年普及组第一题题目描述有一个n×m方格的棋盘,求其方格包含多少正方形、长方形(不包含正方形)。输入格式一行,两个正整数 n,mn,m(n \leq 5000,m \leq 5000n≤5000,m≤5000)。输出格式一行,两个正整数,分别表示方格包含多少正方形、长方形(不包含正方形)。输入输出样例输入2 3输出8 10解题思路思路描述简单进行暴力求解,求解每个网格为右下角的长方形和正方形的个数,累计求和即可。代码描述

2021-01-31 09:42:46 833

原创 小宝的幸运数组

小宝的幸运数组题目链接题目描述对于小宝来说,如果一个数组的总和能够整除他的幸运数字k,就是他的幸运数组,而其他数组小宝都很讨厌。现在有一个长度为n的数组,小宝想知道这个数组的子数组中,最长的幸运子数组有多长。对于子数组的定义,如果可以通过从开头和从结束分别删除若干个(可以为零或全部,前后删除个数不必相同)元素来从数组b获得数组a,则称数组a是数组b的子数组。(子数组包含原数组,但不包含空串)输入格式多组输入。第一行包含一个整数T(1≤T≤10),表示有T组测试数据。每组测试数据包含两行,第一

2021-01-30 21:53:24 227

原创 洛谷P1093、[NOIP2007 普及组] 奖学金

洛谷P1093、[NOIP2007 普及组] 奖学金题目链接思路一个简单的结构体排序,掌握java语言的排序方法即可代码import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in))

2021-01-29 13:58:41 500

原创 Leetcode1631最小体力消耗路径--三种思路

Leetcode1634最小体力消耗路径思路一、暴力(回溯法)说明:此方法时间复杂度太大,不能通过测试,仅仅作为参考class Solution { public int minimumEffortPath(int[][] heights) { m=heights.length; n=heights[0].length; visited=new int[m][n]; res=Integer.MAX_VALUE; dfs(0,0,heights[

2021-01-29 13:54:41 413 1

原创 Java快读快写模板

Java快读快写模板众所周知Java在进行百万级的读写时使用Scanner类和System.out.print()是非常慢的,因此掌握快读快写则十分必要。快读快写代码import java.io.*;public class quicklyReadWrite{ public static void main(String[] args) throws IOException { /* *quick read * 对于文本输入,则使用new FileInputStream("

2021-01-28 21:40:19 881

原创 Java大数判断质数以及求最打公因数

Java大数判断质数以及求最打公因数质数判断static boolean isZhishu(BigInteger n) { BigInteger zero=BigInteger.ZERO; BigInteger two=new BigInteger("2"); BigInteger three=new BigInteger("3"); if(n.equals(two) || n.equals(three)) return true; BigInteger sq=n.sqrt();

2021-01-28 20:56:12 209

原创 Java大数类中开方

Java大数类中开方在jdk8.0中,大数类中没有开方函数,但是牛顿插值法没学过数值分析的又不太容易理解。不过,我们可以使用二分法开方,时间复杂度为O(logn),效率上也不算慢,下面我把代码放上来。代码如下说明:此代码为大数开方二分算法static BigInteger sqrt(BigInteger big) { BigInteger low=BigInteger.ZERO; BigInteger high=new BigInteger(big.toString()); BigInt

2021-01-28 20:46:12 394

原创 Leetcode1579. 保证图可完全遍历

Leetcode1579. 保证图可完全遍历题目链接思路首先使用并查集检查Alice和Bob是否分别能够遍历整张图,如果一人不行则返回-1。然后,开始找两个人都能遍历的情况下的最小边,我们可以只当,两人都遍历的情况下最多的边数为2*(n-1)其中n为顶点数。为了使边数减少,我们可以这样考虑如果存在公共边即类型3我们应将该边对应的两个结点合并,因为这样可以至少减少一条边(这是一种贪心思路),我们这样考虑,如果存在一条公共边他们两个人在遍历图的时候一个人选了另外一个人没选,那么我们可以让没选的那个人加上这

2021-01-27 22:32:14 112

原创 洛谷P1065作业调度方案--Java解法

洛谷P1065作业调度方案–Java解法题目链接废话此题目文字叙述比较多,首先要完全理解题目意思,开始没太理解题目意思浪费了很多时间,其实本题目就是一个简单模拟题目。另外,在对时间线以及各种数据的表示上面也需要花费一些时间考虑,本题目涉及变量众多,建议在命名的时候可以保证见名知意。思路首先,我们要存储工件的安排顺序,并能够知道当前要安排的工件是安排工序几以及该工序应该在哪一个机器上面。另外,我们应该知道当前安排的工件的工序最早可以在什么时间开始。此外,如何表示一个机器的时间线。因为没有想到更好的办

2021-01-27 14:25:38 460

原创 洛谷P1045 [NOIP2003 普及组] 麦森数--Java使用快速幂

洛谷P1045 [NOIP2003 普及组] 麦森数–Java使用快速幂题目链接基本思路通过使用快速幂取模节省运算时间,然后使用大数类保证高精度代码import java.math.BigInteger;import java.util.*;public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); Syste

2021-01-26 16:24:41 289

原创 快速幂

快速幂模板第一种(最简单)//快速幂模板 (a的b次方)%c结果 int pow(int a,int b,int c) { int res=1; a=a%c; while(b!=0) { if((b&1)==1) res=(res*a)%c; a=(a*a)%c; } return res; }第二种(速度稍微快点)//快速幂模板 (a的b次方)%c结果 int pow(int a,int b,int c) { if(b==0) return 1;

2021-01-26 16:17:13 50

原创 洛谷P1249 最大乘积 java两种解法

洛谷P1249 最大乘积 java两种解法方法一、动态规划看到题目,我们可以将题目抽象成01背包问题,背包容量为n,价值是装的物品体积的乘积。但因为大数模拟,而java大数类比较慢,所以此方法会造成超时,但也是一种可行思路。代码描述:import java.math.BigInteger;import java.util.*;public class Main { public static void main(String[] args) { //题目可以转换成01背包问题 Scan

2021-01-26 12:45:50 589 2

原创 Leetcode5664. 放置盒子--贪心+二分

Leetcode5664. 放置盒子–贪心+二分题目链接解题思路我们通过观察法,可以看到如果要是底层堆放的正方形的面积尽可能的小,那么应让其尽可能的满足例2和例3满足的形式(贪心策略)。因此,我们可以考虑先按图中的形式迭代堆放。如果堆放到第i层总和正好满足所给方块数量,那么则第i层的数量即为答案,而如果到第i层总和大于所给方块的数量,我们可以先将方块堆放到第i-1层。然后,我们记录下当前还有多少方块需要堆积,我们再采用二分的方法寻找这i块方块要在最底层需要再放多少才可以满足题目要求(此时剩余的方块在往

2021-01-25 10:46:30 152

原创 Java使用正则表达式去除前导0

Java使用正则表达式去除前导0代码String s="0000000002121210"s=s.replaceAll("^(0+)", "");System.out.println(s);

2021-01-24 21:11:22 725

原创 java实现大数的16进制到8进制的转换

java实现大数的16进制到8进制的转换题目题目描述给定n个十六进制正整数,输出它们对应的八进制数。输入输入的第一行为一个正整数n (1<=n<=10)。接下来n行,每行一个由0到9,A到F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出输出n行,每行为输入对应的八进制正整数。注意输入的十六进制数不会有前导0,比如012A。   输出的八进制数也不能有前导0。实现基本思路:建表,然后将16进制转为2进制然后转为8进制代

2021-01-24 20:32:02 396 1

原创 Leetcode605、种花问题

Leetcode605、种花问题题目链接题目思路本题目可以基于贪心策略去解决,贪心策略是能种就种即可。在具体实现时可以考虑依次步进两格去加快实现速度。代码class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { //基于贪心的策略 int m=flowerbed.length; for(int i=0;i<m;i+=2) { if(flowerbe

2021-01-23 18:29:24 65

原创 Leetcode1489. 找到最小生成树里的关键边和伪关键边

Leetcode1489. 找到最小生成树里的关键边和伪关键边–简单的枚举法基本思路首先找到一颗最小生成树,记录这颗树的权值,然后我们在分别判断每条边是否为关键边或者伪关键边。判断是否为为关键边思路首先将第i条边从图中删去,然后尝试构造最小生成树。如果生成的最小生成树的权值大于我们构造的第一颗最小生成树或者根本无法构成树,那么我们认为这条边是关键边。判断是否为伪关键边的思路因为我们在之前已经判断出在第i条边不加入时可以构成最小生成树(否则在判断其为关键边时已经退出)。故我们接下来可以直接将第i条

2021-01-21 22:31:25 137

原创 Leetcode310. 最小高度树--基于拓扑排序求解此问题

Leetcode310. 最小高度树–基于拓扑排序求解此问题思想:由边界向中心逐渐收缩,直至收缩到最里层。class Solution {public List<Integer> findMinHeightTrees(int n, int[][] edges) { //采用基于拓扑排序算法,一步步排除不可能解,最后只剩下可能解 List<Integer> ret=new ArrayList<Integer>(); if(n==1)

2021-01-20 22:26:19 120

原创 Leetcode309、最佳买卖股票时机含冷冻期-依旧仅仅考虑两种状态

最佳买卖股票时机含冷冻期-dp前两天的状态思路解释:因为该题目中存在冷冻期,因此我们在考虑当前持有股票的最大利润的时候要进行特殊考虑–我们考虑前一天持有股票的最大利润与前两天不持有股票今天买股票的最大利润中的最大值即可。理由:情况一: 如果前一天不持股票的最大利润来自于前两天不持股票的最大利润。那么这两天不持股票的最大利润是相等的,我们考虑前一天的与考虑前两天的结果是相同的,故当天持有股票的最大利润来自于前一天持有股票的最大利润与前两天不持有股票今天买股票的最大利润中的最大值即可。情况二: 如果前

2021-01-19 21:56:11 148

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除