自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 蓝桥杯省赛--公因数匹配(质因子分解)

然后我们为了方便寻找有相同质因子的数,并且我们求的结果是最小的索引下标,所以我们可以转换思路使用字典将有相同质因子的下标存储起来,然后查找最小的小标组合。正常的话,遇到求公因数的问题,肯定是使用辗转相除法,来求公因数。但是这里的数据规模太大,正常的第三个测试点就会超时。其实这里只要比较两个数有没有公因子就行,所有我们可以想到来求每个数的质因子就可以,然后对比哪些数有共同的质因子。首先我们可以通过借助埃氏筛的思想,来快速求一个数的最小质因子。然后就是求每个数的所有质因子,这样后面才可以比较。

2025-03-31 12:44:10 271

原创 博弈论算法

两个人玩取球的游戏。一共有 N个球,每人轮流取球,每次可取集合 n1,n2,n3中的任何一个数目。如果无法继续取球,则游戏结束。此时,持有奇数个球的一方获胜。这里使用动态规划来解决此问题,我们需要递推出来N之前的所有dp值。因为要考虑双方手里的球的奇偶性,因为有三种状态,平手状态需要考虑对方是否也处于必败态。如果两人都是奇数,则为平局。假设双方都采用最聪明的取法第一个取球的人一定能赢吗?两个玩家轮流操作,每次可以减去 1 到 9 之间的任意整数。减法游戏只需要判断当前数取模是否为0,即可快速判断胜负。

2025-03-08 18:11:28 195

原创 Leetcode-最大矩形(单调栈)

首先我们发现,其实找一块块矩阵时,很多时候我们都要重复的寻找一些单元格,来确保我们可以找到最大的矩阵面积。我们定义height[i]代表当前行的第j列往上数,数字为1的矩阵高度。然后我们开始一行行遍历,在第i行时,我们要从第j列开始往前查找j-1一直到0,每次的高度取这一路的最小值,然后不断更新最大值。首先我们仍然计算出每一行的高度数组,然后遍历每一行,像上面这个文章一样,看成计算柱状图中的最大矩阵即可。只写了暴力枚举的,单调栈方法的代码和上个题差不多,偷个懒。的最大矩形,并返回其面积。

2025-03-01 20:03:23 428

原创 Leetcode-柱状图中最大的矩形(单调栈)

当我们遍历到2的时候,我们发现了逆序,也就是可以确定最近的最大矩阵了。首先,我们在遍历的时候,去维护一个单调栈,并且单调栈里存放的位置而不是高度。因为如果位置2和3之间有比6大的数时,我们的栈不会保存这个数的位置,因为遇到了6也就是逆序,所以会弹出比6大的数。所以回到这个公式,stack[-1]是上一个比6小的位置,这样计算才是真正的宽度。只有当下一个柱子的高度不再高的时候,我们才能找到最大的矩阵。同样的道理,我们继续弹出单调栈,直到我们栈顶元素比height[i]要小,然后入栈height[i]。

2025-03-01 19:38:38 294

原创 Leetcode-接雨水(单调栈)

给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。6上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。

2025-02-26 17:42:18 204

原创 最接近的三数之和----双指针

给你一个长度为n的整数数组nums和 一个目标值target。请你从nums中选出三个整数,使它们的和与target最接近。返回这三个数的和。假定每组输入只存在恰好一个解。2与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。0与 target 最接近的和是 0(0 + 0 + 0 = 0)。

2025-02-26 16:10:00 295

原创 字符串前缀哈希+贪心(形成目标字符串需要的最少字符串数 I)

字符串哈希通常通过将字符串转换为一个数值,常见方法是对字符串中的每个字符进行加权求和。常见的哈希函数为,它使用一个常数基数和模数进行计算。对于一个字符串 S = s[0]s[1]s[2]...s[n-1],其哈希值 hash(S)可以通过如下公式计算:其中代表当前位置字符的ASCII值,BASE是一个常数基数,通常选为大于字符集大小的随机数字。MOD是一个常数模数,通常是一个大质数,目的是为了防止哈希值过大导致溢出。通过计算两个字符串的哈希值,可以快速的判断两个字符串是否相等。

2024-12-20 15:18:22 883

原创 经典问题---跳跃游戏II(贪心算法)

给定一个长度为n的整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果你在nums[i]处,你可以跳转到任意i + j < n返回到达的最小跳跃次数。生成的测试用例可以到达。2跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1步,然后跳3步到达数组的最后一个位置。

2024-12-20 00:53:36 626

原创 数组的最大美丽值(区间最大重叠次数)

给你一个下标从开始的整数数组nums和一个整数k。inums[i]数组的定义为数组中由相等元素组成的最长子序列的长度。对数组nums执行上述操作任意次后,返回数组可能取得的美丽值。你能对每个下标执行此操作。数组的定义是:经由原数组删除一些元素(也可能不删除)得到的一个新数组,且在此过程中剩余元素的顺序不发生改变。3在这个示例中,我们执行下述操作:- 选择下标 1 ,将其替换为 4(从范围 [4,8] 中选出),此时 nums = [4,4,1,2]。

2024-12-16 00:08:33 374

原创 回文链表-(快慢指针)

给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。

2024-12-09 16:52:53 368

原创 加油站-(贪心算法)

在一条环路上有n个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组gas和cost,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回-1。如果存在解,则它是的。3从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油。

2024-12-09 12:40:15 756

原创 拆分单词(记忆化回溯)

但是实际很多匹配是重复计算,这就需要用到记忆化回溯了。首先从开始递归每一种解法,并保存递归的结果。这个题目其实就是用字典中的字符串不断的匹配字符串s,但是暴力算法的时间复杂度是O(不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。如果可以利用字典中出现的一个或多个单词拼接出。

2024-12-07 23:55:18 372

原创 从二维到一维:动态规划矩阵问题的优化之道

本文围绕动态规划中的经典矩阵问题(如最小路径和问题),介绍了如何利用二维 `dp` 数组进行求解,并深入探讨了空间复杂度的优化方法。通过观察状态转移规律,发现仅需使用当前位置的右方和下方状态值即可完成计算,因此可以将二维数组优化为一维数组。在优化方案中,利用一维 `dp` 数组记录每一行的状态,结合动态转移方程,从右下角倒序遍历矩阵,有效地将空间复杂度从 O(N x M) 降低到 O(N)。

2024-11-16 20:37:06 589

原创 动态规划问题-删除并获得点数(Java实现)

动态规划打家劫舍的变型题目

2024-11-15 14:56:38 355

原创 经典动态规划问题-打家劫舍Java实现

如果i-1没偷过,那么在计算dp[i]时,应该考虑dp[i-1] + num[i]。状态方程应该为dp[i] = nums[i]+max( dp[i-2] ,dp[i-1])。其实这是多余的,因为如果第i-1个房间没有被偷,也就是偷第i-2个房间比i-1更值得偷,那么肯定有dp[i-1] = dp[i-2],既然相等,有一个加num[i]的即可。如果i-1被偷过,那么只能有dp[i] = max( nums[i] +dp[i-2] ,dp[i-1]),偷窃到的最高金额 = 2 + 9 + 1 = 12。

2024-11-14 18:09:13 166

原创 最长回文子串(中心扩散算法)Java实现

给你一个字符串s,找到s中最长的 回文子串。如果字符串向前和向后读都相同,则它满足。"bab""aba" 同样是符合题意的答案。

2024-11-14 16:24:06 509

原创 Failed to calculate the value of task ‘:app:compileDebugJavaWithJavac‘ property ‘options.generatedSo

原因:Gradle版本太高,老项目的 Android gradle plugin 是3.6.3,Android Studio打开项目默认是用的Gradle7.4。,下载之后放到C:\Users\xxx\.gradle\wrapper\dists\gradle-6.1-bin\xxx\ 目录下,xxx每个人不一样。刚下好就还没安装,最后终于找到问题。1.以为是项目比较老,而配的Jdk17导致的错误,查看项目用的是jdk1.8,遂安装,无果。背景:接收一个老Android项目,打开发现编译错误。

2024-01-30 17:21:44 4930 2

原创 背包与魔法 2022年国赛 背包问题

首先不考虑使用魔法的情况,就是单纯地背包问题。唯一不同的就是使用魔法可以让你所拿的物品中的一个物品的价值翻倍。所以你需要记录每一步中拿到的单个商品的最大值,用于后面确定加倍的是最大价值。

2023-06-08 20:24:23 225

原创 迷宫 2022年国赛 BFS+记忆化搜索

所以这里可以想到记忆化搜索,即一个dp[i] = min(dp[i+1],dp[i-1],dp[i+N],dp[i-N],dp[i])。min函数中的dp[i]代表通过传送门计算的距离,也就是一个点的最短路径由他上下左右和传送门后的点的最小值确定。平常的记忆化搜索都是min(dp[i+1],dp[i+N]),也就是他左移和下移一格位置的最小值。但是因为本题传送门的问题,导致可能上面的点可以更快的到达终点。对于遍历,我们利用BFS的思想,以广度优先搜索第一遍历的肯定要比后来遍历到该点路径要短。

2023-06-08 17:17:11 254

原创 左移右移 2022年国赛 思维

简单的思维题,应该从后往前遍历操作。如果后面的对数i操作过,则前面对数i的操作都可以无视。可以通过栈这种数据结构实现后往前遍历。

2023-06-08 09:05:46 207

原创 数数 2022年国赛 数论-动态规划

有一些动态规划的意思,首先得出i的素数相乘的个数为dp[i],在让i*j的相乘素数个数为dp[i*j]=dp[i]+1;j从素数列表中取出,且i%j==0时就不需要再遍历后续的素数了。因为后面i*j的结果会再次遍历的时候出现。例如:i=5x7,j=9是后续会被遇到的应该在 i=5x7,j=5时就停止。因为后面会遍历到i=7x9,j=5。所以保证要j不超过i中任意一个素数,这样就会优化将近一半的时间。

2023-06-07 21:09:05 159

原创 123 2021年国赛 二分搜索+前缀和

主要是考察前缀和,我们将数组划分为若干个小区间,第i个区间是1,2,3....,i。最终的索引下标=前一个区间的索引+数num所在区间的距离第一个元素的偏移量。小蓝发现,这个数列前 1 项是整数 1,接下来 2 项是整数 1 至 2,接下来 3 项是整数 1 至 3,接下来 4 项是整数 1 至 4,依次类推。接下来 T 行,每行包含一组询问,其中第 i 行包含两个整数 l和 r,表示询问数列中第 l个数到第 r 个数的和。输入的第一行包含一个整数 T,表示询问的个数。的long数组大约为256mb。

2023-06-07 19:24:43 753

原创 路径之谜 2016年国赛 深度优先搜索

有时是可以的,比如上图中的例子。为了方便表示,我们约定每个小格子用一个数字代表,从西北角开始编号: 0,1,2,3 \cdots⋯。本题的要求就是已知箭靶数字,求骑士的行走路径(测试数据保证路径唯一)第一行一个整数 N (0≤N≤20),表示地面有 N×N 个方格。第二行 N 个整数,空格分开,表示北边的箭靶上的数字(自西向东)第三行 N 个整数,空格分开,表示西边的箭靶上的数字(自北向南)小明冒充 XX 星球的骑士,进入了一个奇怪的城堡。假设城堡地面是 n×n 个方格。输出一行若干个整数,表示骑士路径。

2023-06-07 16:15:42 728

原创 刷题整理(持续更新~)

哈希表并查集递归前缀和广度优先搜索记忆化搜索哈希表日期问题二分查找滑动窗口数论最短路径。

2023-06-07 16:10:01 686

原创 LeetCode 可获得的最大点数 前缀和 滑动窗口

几张卡牌,每张卡牌都有一个对应的点数。点数由整数数组cardPoints给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿k张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组cardPoints和整数k,请你返回可以获得的最大点数。

2023-04-06 22:19:41 269

原创 Leetcode 拼车 差分数组

给定整数 capacity 和一个数组 trips , trip[i] = [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassengersi 乘客,接他们和放他们的位置分别是 fromi 和 toi。对于区间[i,j]都加m,差分数组只需要cf[i]+=m;当且仅当你可以在所有给定的行程中接送所有乘客时,返回 true,否则请返回 false。对于此题来说,只需要通过差分数组记录乘客数量,然后判断每一站乘客是否超过车辆的容量。

2023-04-06 17:18:22 308

原创 LeetCode 长度最小的子数组 前缀和 滑动窗口

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0。这题很容易想到前缀和,但是找出最小长度的子数组需要用到二分来优化,不然会超时。给定一个含有 n 个正整数的数组和一个正整数 target。

2023-04-06 16:07:28 386

原创 HTML5移动端开发页面无法上下滑动问题

最近开发一个移动端外卖应用,在写商品列表时发现对于的商品列表不显示,而且往下划不动。从网上收集资料后,以为是设置viewport导致的,最终发现设置无果,看到一篇文章解我心中疑惑。问题所在:设置了overflow:hidden。

2023-02-28 19:39:06 2023

原创 BeanUtils.copyProperties的使用

在写项目时经常会用到的一个方法,主要作用就是深拷贝。拷贝后两个对象不会有任何联系,拷贝的依据是A对象的属性和B对对象的属性的属性名和属性类型全部相同;将a的属性拷贝给b,只有name会被拷贝,List类型的即使相同也不会被拷贝。如果想要深拷贝List类型的属性,我常用的是。

2023-01-05 17:39:08 593

原创 Error creating bean with name ‘xxx‘: Unsatisfied dependency expressed through field ‘xxx‘: Error cre

原因:spring boot 3.0.0版本不兼容mybatis-plus,总而言之就是版本问题。解决方法:将版本改为2.5.0即可。

2022-12-19 11:31:11 522

原创 使用反射优化代码,省去大量if else语句

当一个类中有多个方法时,需要通过指定的参数,去对应调用相应的方法。一般会使用if else语句或者switch语句,十分冗余,后期类的方法增加时,还需改动代码。很实用的方法,但是可能降低效率.....

2022-12-10 22:37:05 216

原创 为什么equals()方法字符串放在对象前面?

答:这样可以有效避免出现空指针异常的情况,例如str为null时,str.equals("xxx");很明显会报错....。很实用的编程小技巧....为什么总是看到"xxx".equals(str);

2022-12-10 22:09:56 446

原创 JSP编写的连接数据库的数据显示页面不实时更新

问题原因:因为mybatis写的连接数据库的sqlsession是复用的,通过一个mybatisUtil去获取一共静态sqlSession对象,也就是都复用这个会话去查询。所以就代表下一次请求页面的时候获取的会话还是上一次的SQLSession,也就是上一次的会话查询到的什么,这一次就是什么。数据是通过Mybatis连接数据库,但是当数据库更新数据时,页面的数据并没有变。SqlSession级别的缓存,同一个SqlSession的发起多次同构查询,会将数据保存在一级缓存中。

2022-11-21 13:22:04 714

原创 Servlet+Mybatis 遇到MySQL链接超时断开问题

org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.mysql.cj.jdbc.exceptions.CommunicationsException: The last packet successfully received from the server was 63,151,882 milliseconds ago. The last packet sent succes

2022-11-13 14:59:04 433

原创 Linux常用命令----持续更新

个人整理常用Linux操作操作命令

2022-11-04 20:50:03 162

原创 使用Maven打包好的项目部署到远程Linux服务器Tomcat

下载图中的版本。首先我使用的是tomcat10,最低支持jdk1.8。安装了jdk19,是当时的最新版实测tomcat开启失败,新版jdk也不自带jre,所以建议安装jdk1.8。下面的图是jdk19,然后最后同样的方法又来了一遍jdk1.8成功。

2022-11-04 11:29:11 1057

原创 okHttp网络请求结果Response返回主线程中

首先我们知道Android3.0 之后已经不允许在主线程中访问网络了,我们在访问网络时必须要新建一个线程去执行,但是这样的话请求返回的响应在另一个线程中,我尝试过使用全局静态变量等等其他,最后还是使用Handler解决的问题。这是我写的一个工具类,url是指定的一个地址,我用的全局变量。注明:Android开发小白,可能这不是特别好的方法,但是亲测有效。首先在主线程内写一个Handler。...

2022-08-05 21:59:58 2666

原创 Android开发学习日记--读取通讯录联系人和获取最新短信验证码

内容观察器的用法与内容提供器类似,也要从ContentObserver派生一个新的观察器,然后通过ContentResolver对象调用相应的方法注册或注销观察器。然而有时不但要获取以往的数据,还要实时获取新增的数据,最常见的业务场景是短信验证码。记录了用户的通讯录所有数据,包括手机号,显示名称等,但是里面的mimetype_id表示不同的数据类型,这与表mimetypes。,事先给目标内容注册一个观察器,目标内容的数据一旦发生变化,就马上触发观察器的监听事件,从而执行开发者预先定义的代码。...

2022-07-24 12:01:44 1408

原创 Android开发学习日记--运行时动态申请应用权限

方法,即可命令系统自动弹出权限申请窗口,该方法的第一个参数为活动实例,第二个参数为待申请的权限名称数组,第三个参数为本次操作的请求代码。第三步,判断用户的权限选择结果。如果是Android6.0以上才用动态申请权限,也就是下面要讲的。方法,该方法的第一个参数为活动实例,第二个参数为待检查的权限名称。,如果当前页面请求弹出权限申请窗口,那么该页面的Java。这种情况大多出现在刚安装完软件,进入软件的时候。方法,并在该方法内部处理用户的权限选择结果。先写个工具类PermissionUtil。...

2022-07-23 14:48:40 2999

原创 Android开发学习日记--内容提供者(跨应用间的数据库修改)

其实内容提供者就是一个给外部应用提供的窗口,通过编写这个代码,可以限制外部应用合法的访问。

2022-07-22 12:47:06 880

空空如也

空空如也

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

TA关注的人

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