自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AttributeError: module ‘cv2.face’ has no attribute ‘LBPHFaceRecognizer_create’

把opencv-python卸载了,然后安装opencv-contrib-python,我选择的是4.5.4.60,测试没问题。

2024-04-17 01:44:49 168

原创 检查链表是否回文

可以使用快慢指针的方式找到链表的中点,其中快指针每次移动两步,慢指针每次移动一步。当快指针到达链表末尾时,慢指针指向的位置即为链表的中点。这段代码中在处理奇数长度的链表时选择保留中间节点,当然你也可以选择舍弃比较中间节点。然后将链表的后半部分反转,比较前半部分和反转后的后半部分,从而判断链表是否为回文链表。根据回文对称的特点,不难想到将链表分成前后两部分,然后将其中一部分反转的方法。

2024-02-11 18:24:39 314 1

原创 重新排列链表

不难注意到目标链表即为将原链表分成前后两段然后将后半段反转再依照某种规则链接得到的。这样我们的任务即可划分为三步:找到原链表的中点,将原链表的右半端反转,将原链表的两端合并。可以通过快慢指针找到中点不过要注意链表长度分别为奇偶情况的处理,反转可以通过迭代或者递归的方法。另一种相较于这个方法没那么优雅的方法是我们可以使用线性表。因为链表不支持下标访问,所以我们无法随机访问链表中任意位置的元素。因此我们可以利用线性表存储该链表,然后利用线性表可以下标访问的特点,直接按顺序访问指定元素,重建该链表即可。

2024-02-06 18:48:30 377

原创 链表中的数字相加

在正常的两个整数加法运算时,我们是从低位开始,然后依次相加更高位的数字,所以不难想到我们需要将链表反转,方便我们从原链表的尾节点开始遍历到头节点。另外还要考虑运算时产生的进位。不能简单认为将两条链表转变为整数后进行运算,然后将结果转变为链表。因为如果链表很长,这可能会导致整数溢出。

2024-02-02 18:25:00 254

原创 将链表反转

反转链表在解决需要从尾节点开始遍历到头节点的地方很实用,是一种常用的解题技巧。在反转时,我们可以考虑从前向后反转和从后向前反转两种方式。

2024-02-02 17:09:04 306

原创 两个链表的第一个重合节点

还是为了解决两链表因长度不同而带来的问题,仔细思考,如果两链表存在重合节点,那么从第一个重合节点开始到链表尾部都是相同的,也就是说长度不同是发生在重合之前。可以先把两个链表的节点分别放入两个辅助栈,接下来比较两个栈的栈顶节点是否相同,如果相同,则把栈顶节点弹出,然后比较下一个栈顶节点,最后一个相同的节点即为所求节点。为了解决这个问题可以先遍历两个链表得到它们的长度,在第二次遍历时,初始化两指针分别指向链头,令较长的链表中的指针先移动若干步,然后两指针以相同速度在链表中移动,直到相遇。

2024-02-01 18:48:38 1666

原创 链表中环的入口节点

如果知道了环中节点的数目为n,那么我们就可以使用前后双指针,让一个指针先走n步,随后让另一个指针从链头出发,两指针以相同速度移动,那么两指针相遇时的位置就是入口节点(因为前指针先走了n步,相当于绕环一圈,所以两指针相遇的位置就是入口节点),当然前指针先走n的整数倍步也是一样的。首先肯定是要证明链表中有环存在,没环自然没有入口节点。而证明有环可以用快慢双指针的思想,即快指针每次走两步,慢指针每次走一步,如果有环,那么两指针一定会相遇,如果没有环,那么快指针直到抵达尾节点都不会和慢指针相遇。

2024-02-01 17:25:19 520

原创 删除倒数第k个节点

题目要求只遍历链表一次,如果没有这个要求我们可以先遍历一遍链表得出链表长度,然后在第2次遍历时找出第n-k个节点(即倒数第k+1个节点),然后将该节点的next指针指向倒数第k-1个节点。由此,我们可以得知该题关键是如何在遍历一次链表的情况下找到这个倒数第k+1个节点。简单来说就是先让第1个指针移动k-1步,然后再如第2个指针指向链头节点,再让两个指针以相同速度一起移动。当第1个指针到达链尾节点时第2个指针正好指向倒数第k个节点。在一个有哨兵节点的链表中,从第2个节点开始才真正保存有意义的信息。

2024-01-31 17:40:23 319

原创 回文子字符串的个数

即如果存在一个长度为m的回文子字符串,再分别向该回文两端延伸一个字符,并判断这两个字符是否相同,如果相同则找到了一个长度为m+2的子字符串。首先遍历字符串中的每个字符,以每个字符为中心,调用方法统计以当前字符为中心的回文子串数量(回文长度为奇数情况),以及以当前字符和下一个字符为中心的回文子串数量(回文长度为偶数情况),并将结果累加到总计数中。另外,回文的长度即可以是奇数也可以是偶数,所以回文的中心即可能是一个字符,也可能是两个字符。

2024-01-30 17:04:24 352

原创 最多删除一个字符得到回文

与有效回文类似,还是从字符串两端开始逐步比较两个字符是否相同,如果相同则继续移动;如果不同则删除一个字符后判断剩余部分是否构成回文。

2024-01-26 17:26:26 325

原创 有效的回文

常用方法就是双指针。使用两个指针从字符串的两端向中间移动,同时比较对应位置的字符,直到两个指针相遇。由于题目忽略非字母和非数字的字符且忽略大小写,所以跳过那些字符,并将字母转换为小写(或大写)进行比较。指针移动总次数最多等于字符串的长度,所以时间复杂度是O(n)。

2024-01-11 21:17:21 512

原创 包含所有字符的最短字符串

首先扫描字符串t,每扫到一个,哈希表中对应值加1。然后扫描字符串s,每扫描一个就检查哈希表中是否包含该字符,没有则忽略不计。所有如果字符串s包含字符串t的所有字符,那么哈希表中的所有的值应该都小于或等于0。某一时刻两指针间子字符串已经包含字符串t的所有字符,因为目标是找出最短符合条件的子字符串,所有移动左指针,然后判断删除最左边的字符后是否仍包含字符串t的所有字符。还是维护一个滑动窗口,某一时刻两指针间子字符串还没包含字符串t的所有字符,则移动右指针添加新的字符,如果还没有则继续移动右指针。

2024-01-05 23:39:19 989

原创 不含重复字符的最长子字符串

若两指针之间的子字符串无重复字符,那么移动右指针,然后判断新的字符在子字符串中有没有出现,如果还是没有则继续移动右指针;如果包含重复字符则移动左指针,删除最左边的字符,如果还是包含重复字符就继续移动左指针,如果不包含重复字符,则移动右指针添加新字符。因此下面介绍一种避免多次遍历哈希表的解法。要找出不含重复字符的最长子字符串,可以用一个哈希表统计子字符串中字符出现的字数,出现一次即哈希表中对应位置的数值为1,未出现即为0,重复了那么它的值会比1大。下面是另一种思路相似,但实现方式不同的另一种解法。

2024-01-03 23:55:10 511

原创 字符串中的所有变位词

同样的,也可以用两个数组去分别统计,然后比较两个数组是否相同。维护时使用两个指针,指针i从s2.length()索引开始,逐步加入字母(对应位置加1),指针i-s2.length()从0索引开始,逐步删除字母(对应位置减1)。初始化阶段(前n个字符):时间复杂度是O(n),滑动窗口阶段(从第n个字符开始):时间复杂度是O(m - n),因此,整个算法的时间复杂度是 O(n + m - n) = O(m)。的变种,思路都大差不差,一样可以用一个数组来模拟哈希表去统计字母出现的次数,然后与0比较。

2023-12-30 19:17:14 540 1

原创 安卓保存中文数据和查询中文数据结果不正确问题

在Android开发中,特别是涉及到数据库操作时,对于中文查询和保存中文数据可能需要注意字符编码的处理。确保数据库表的字符集和校对规则正确设置,以支持中文字符。常用的字符集包括UTF-8。如果你使用的是JDBC连接数据库,确保在连接数据库时设置了正确的字符编码。

2023-12-28 12:28:34 335 1

原创 Glide加载不出图片与请求浏览器资源时中文转码问题

现在图片显示问题是解决了,但之后我又发现像诸如http://什么什么/Cybertruck.png英文命名的图片可以访问,而http://什么什么/赛博皮卡.png却不能正常显示。首先确保你的图片 URL 地址是正确的,可以通过在浏览器中直接访问这个 URL 来测试。首先在res下的xml文件夹(没有则创建)里新建network_security_config.xml。然后就是重要的内容了,如果你跟我一样是http的url,并且是Android9.0之后的版本。然后确定依赖库没有问题,我的是4.12.0。

2023-12-28 00:10:04 758 1

原创 字符串中的变位词

可以利用双指针思想,在s_2中设置一个固定长度的窗体,长度比s_1的长度大1。首先,先扫描字符串s_1,每扫到一个字符,对应的值加1,同时,扫描第二个字符串s_2中对应位置字符,对应的值减1,然后先做一次判断,如果满足变位词,数组中的所有值应均为0。第一个指针为i-s1.length(),第二个指针为i(两指针之间包含s1.length()+1个字符),两个指针都右移1位,每当增加一个字符时,数组对应位置的值减1,每当删除一个字符时,数组对应位置的值加1,每次更新后都去判断数组中的所有值。

2023-12-26 19:10:03 524 1

原创 二维子矩阵的数字之和

因为原先sums[row2][col2] - sums[row1-1][col2] - sums[row2][col1-1] + sums[row1-1][col1-1]中row1-1和cow-1可能为负数,而这样在计算时,可以通过sums[i+1][j+1]表示从(0,0) 到(i,j)的部分和,即sums[row2 + 1][col2 + 1] - sums[row1][col2 + 1] - sums[row2 + 1][col1] + sums[row1][col1]。

2023-12-24 18:05:30 435 1

原创 安卓开发之关于如何用viewPager实现三种不同效果的轮播图

还是因为课程设计的缘故,想美化一下界面就想着实现一个轮播图。本文展示了三种效果的轮播图供大家交流,话不多说,直接上代码。

2023-12-23 19:22:11 1103 1

原创 左右两边子数组的和相等

还是累加数组求子数组之和的思想,想求第i个数字左边子数组之和,可以由第i个数字的前缀和减去第i个数字的值,想求第i个数字右边子数组之和,可以由数组所有数字之和减去第i个数字的前缀和。

2023-12-19 18:22:16 491 1

原创 关于安卓连接mysql数据库不显示数据的一种调试办法

今天在完成学校安卓大作业时遇到不显示数据的问题。于是开始调试,偶然机会读到这篇文章。点击Logcat,发现gid为空值。,成功找到了问题所在。

2023-12-18 19:11:40 548 1

原创 0和1个数相同的子数组

变个思路若将数组中的0变为-1,那么此题就是求解子数组数字之和为0的最长子数组的长度。若数组中前i个数字之和为m,前j个数字(j>i)之和也为m,那么从第i+1个数字到第j数字的子数组之和为0,长度为j-i。我们可以把前缀和保存到哈希表中,由于题目是要求最长子数组长度,所以哈希表的键是前缀和(累积和),值是当前扫描的数字的下标。该算法时间复杂度和空间复杂度均为O(n),其中n为数组长度。

2023-12-17 18:17:28 162 1

原创 和为k的子数组

其基本思想是将原始数组中的元素累加起来,形成一个新的数组,新数组中的每个元素表示原数组中对应位置及之前所有元素的累加和。首先计算下标0的数字到所有数字的子数组之和,比如下标0到下标0,记作S_0,下标0到下标i,记作S_i,下标0到下标j,记作S_j,则子数组[i, j]的和就是S_j - S_(i-1)。之前都是用双指针求解子数组之和,但该法有个弊端,那就是当数组中除了有正数外还有负数和零时,添加数字就不一定能增加子数组的和,同样的,删除数字也不一定减小子数组的和。,来确定是否存在和为。

2023-12-16 16:54:25 157

原创 乘积小于k的子数组

由于目标是找出数字乘积小于k的子数组的个数,所以当移动right到某一位置时满足子数组的乘积小于k,不必再移动left,因为只要保持right不动,向又移动left所形成的所以子数组的数字乘积就一定小于k,那么一下子就找到了right-left+1个。初始时,两个指针都指向数组第一个元素,当left和right之间的子数组数字之积小于k时,向右移动指针right,当left和right之间的子数组数字之积大于k时,向右移动指针left。差不多,都采用了窗口的思想。时间复杂度为O(n),理由同。

2023-12-14 20:02:17 194 1

原创 和大于或等于k的最短子数组

初始时,两个指针都指向数组第一个元素,当left和right之间的子数组数字之和小于k时,向右移动指针right,直到两个指针之间的子数组数字之和大于k,否则向右移动指针left,直到两个指针之间的子数组数字之和小于k。假设数组长度为n,尽管代码中有两个嵌套的循环,该解法的时间复杂度仍然是O(n),这是因为在这两个循环中,变量left和变量right都是只增加不减少,都是从0增加到n-1,因此总的执行次数是O(n)。

2023-12-12 17:06:58 219

原创 数组中和为0的三个数字

所以这道题我们可以先排序,然后固定一个数i,然后该题就转换为在排序数组中查找和为-i的两个数。排序算法时间复杂度一般为O(nlogn),排序数组中找出和为给定值的方法时间复杂度为O(n),由于要固定数组中每个数字,故查找三元组的时间复杂度为O(n^2),所以总体时间复杂度为O(nlogn)+O(n^2),仍是O(n^2)。输入一个数组,如何找出数组中所有和为0的3个数字的三元组?例如,在数组[-1,0,1,2,-1,-4]中有两个三元组的和为0,它们分别是[-1,0,1]和[-1,-1,2]。

2023-12-09 15:31:38 364

原创 排序数组中的两个数字之和

我们最容易想到的方法是,先扫描到数字i,再依次判断其余数字之和是否等于k,假设数组长度为n,因为每个数字要和其他n-1个数字组合,所以这种解法的时间复杂度是O(n^2)。

2023-12-06 23:33:32 163 1

原创 单词长度的最大乘积

比较大小是不难的,所以这道题的核心是如何判断两个字符串中是否有相同字符,一种暴力解决方案是基于其中一个字符串里的每个字符,扫描判断在另一个字符串中是否存在。假设两个字符串长度分别为p、q,则判断两个字符串是否包含相同的字符的时间复杂度为O(pq)。用哈希表记录字符串中出现的字符判断两个字符串中是否有相同字符,只需判断某个字符是否在对应的哈希表中都出现了。所有字符均为小写字母,所以最多只需在哈希表中查询26次,其为常数,因此可以认为,应用哈希表后判断两字符串是否包含相同的字符的时间复杂度为O(1)。

2023-12-04 22:41:57 184

原创 只出现一次的数字

所以在该题目中,若所有数字第i个数位之和被3整除,说明这个只出现一次的数字第i个数位一定是0。同理,若所有数字第i个数位之和被3除余1,说明这个只出现一次的数字第i个数位一定是1。由此,同类型的题目“输入一个整数数组,数组中只有一个数字出现m次,其他数字都出现n次。假设m不能被n整除”都可以用这种方法:如果数组中所有的数字的第i个数位相加之和能被n整除,那么出现m次的数字的第i个数位一定是0;该题目有个简化的类似题目“输入数组中除一个数字只出现一次之外其他数字都出现两次,请找出那个只出现一次的数字”。

2023-12-03 15:57:44 168 1

原创 前n个数字二进制形式中1的个数

输入一个非负数n,请计算0到n之间每个数字的二进制形式中1的个数,并输出一个数组、例如,输入的n位4,由于0,1,2,3,4的二进制形式中1的个数分别为0,1,1,2,1,因此输出数组[0,1,1,2,1]。

2023-12-02 16:23:52 328 1

原创 二进制加法

将二进制字符转换为int或long型整数,再进行计算可能会导致溢出(因为没限制字符串长度)。我们可以参照十进制的运算规则来编写代码,在计算十进制加法时,我们右端对齐,从个位开始向左方向把对应的数位相加,逢十进一。输入两个表示二进制的字符串,请计算它们的和,并以二进制字符串的形式输出。例如,输入的二进制字符串分别是“11”和“10”,则输出“101”同理,计算二进制字符串时我们可以从其右端除法向左做加法,逢二进一。

2023-11-30 20:57:11 125

原创 整数的除法

算法不是很难,解法是基于减法实现除法。但要考虑溢出,因为是整数除法,并且除数不为0,所以商的绝对值一定小于被除数的绝对值,所以溢出情况只有一种,(-2^31)/(-1)=2^31(32位的int取值范围为(-2^31~2^31-1))。输入2个int整数,它们进行除法计算并返回商,要求不得使用乘号'*'、除号'/'和求余符号'%'。当发生溢出时,返回最大的整数值。例如,输入15和2,输出15/2的结果,即7。

2023-11-30 20:26:25 31

原创 基于Fuxa实现数据可视化和人机交互简单测试

打开浏览器输入刚才复制的网址,点击左下角编辑器,点击设置-连接,在打开界面点击右下角加号。随后打开server服务端,在此处输入cmd回车,然后输入npm start回车。打开client客户端,在此输入cmd回车,然后输入ng serve回车。回到编辑器,添加输出,点击右侧属性,点击图片所示,最后ok。进入实验室,在输入框中输入数字,数字被修改即证明成功。选择TCP/TP协议,点击ok,注意不要关闭页面。随后打开mbslave,点击确定。输入如下信息,点击ok。输入以下信息,点击ok。

2023-11-25 20:54:20 579

空空如也

空空如也

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

TA关注的人

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