自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Canal对MySQL进行数据迁移

通过Canal可以没有侵入的,即时的将数据库的改动同步到Redis、ElasticSearch或者其他数据存储库中,如果是在大数据方面需要数据聚合的话,推荐使用Flink CDC。目前Canal还有一个问题就是似乎不再维护了,但还是为我们提供了一个轻量化的数据迁移、同步工具。

2023-06-29 15:28:47 1736 2

原创 CINTA 作业八

中国剩余定理CRT

2021-12-02 17:09:25 1087 1

原创 CINTA 习题八

CINTA 习题八 第一题 设G是群,H是G的子群,任取g1g_{1}g1​、g2g_{2}g2​∈\in∈G,则g1g_{1}g1​H=g2g_{2}g2​H当且仅当g1−1g2∈g_{1}^{-1}g_{2}\ing1−1​g2​∈G 1、充分性: 存在h1h_{1}h1​,h2∈h_{2}\inh2​∈H,使得g1g_{1}g1​H=g2g_{2}g2​H 则由定理8.1可知:g1g_{1}g1​H=g2g_{2}g2​H当且仅当g2∈g_{2}\ing2​∈g1g_{1}g1​H 得出:g1−1g

2021-11-17 08:52:16 1151

原创 CINTA 作业五 循环群

CINTA 作业五 循环群 第一题 请心算列举出群Z10Z_{10}Z10​的所有生成元。 易知Z10Z_{10}Z10​的阶n为Φ\PhiΦ(10)=|{1,3,7,9}|=4 由推论7.1可以得知Z10Z_{10}Z10​恰有Φ\PhiΦ(4)=2个生成元 由心算得Z10Z_{10}Z10​的所有生成元为:3、7 第二题 群Z17∗Z_{17}^{*}Z17∗​有多少个生成元?已知3是其中一个生成元,请问9和10是否为生成元? 易知Z17Z_{17}Z17​的阶n为Φ\PhiΦ(17)=|{1,2

2021-11-03 09:31:03 682

原创 CINTA 作业四 群、子群

CINTA 作业四 群、子群 CH6 习题三: 证明命题6.6 设G为群,且a,b,c∈G。如果ba=ca,则b=c;并且,如果ab=ac,则b=c 证明 1、若ba=ca,则b=c 两边同时乘同一个:a(-1) 则有baa(-1)=caa(-1) 由aa(-1)=e得 be=ce 由单位元的唯一性得 b=c 2、若ab=ac,则b=c 两边同时乘同一个:a(-1) 则有a(-1)ab=a(-1)ac 由a(-1)a=e得 eb=ec 由单位元的唯一性得 b=c CH6 习题四 证明命题6.7

2021-11-02 22:25:55 393

原创 CINTA拓展作业四 群、子群

CINTA拓展作业四 群、子群 CH6 习题16: 题目: 编程完成下列工作: 给定一个素数p,返回乘法群Z*p的一个子群,据此,能否找出子群的阶和Z*p的阶之前的关系 代码: void ZpGroups(int p) { long long order;//阶 vector<long long> v1; vector<long long> v; //群 for(int i=1;i<p;i++) { for(in

2021-10-27 11:21:15 360 1

原创 CINTA作业三:同余、模指数、费尔马小定理、欧拉定理

CINTA作业三:同余、模指数、费尔马小定理、欧拉定理 一、实现求乘法逆元的函数,进而得出求解同余方程的函数 1、乘法逆元: //实现求乘法逆元的函数 int MultiplicativeInverse(int a, int m) { //只讨论a的乘法逆元小于m的情况,且为正整数的情况 for (int i = 0; i < m; i++) if (i * a % m == 1) return i; return -1;//如果无解返回-1 } 2、求解同余方程: //实现求同余方程的解

2021-09-29 01:54:59 686 1

原创 CINTA 作业二:GCD与EGCD

CINTA 作业二:GCD与EGCD 1、Bezout定理的证明 设s=gcd(a,b),显然s|a且s|b 又因为r、s∈Z∗ 因此s|ar、s|bs 显然要让前面的式子成立,则必然有d为a和b的公约数的倍数 又因为r、s∈Z+ 因此d必定为a和b最大公约数的倍数 因此该定理成立 2、实现GCD算法的迭代版本 int gcd(int a, int b) { while (b) { int temp = b; b = a % b; a = temp; } return a; } 3、

2021-09-22 13:34:57 290 1

原创 CINTA U1使用迭代法实现简单乘法

CINTA U1使用迭代法实现简单乘法 思路: 一般的乘法: 比如我们计算一个ab,按照一般的乘法,应该就是将a相加b次后得到的结果就是ab。 具体代码的实现就是: int multiply(int a,int b) { for(int i=0;i<b;i++) a+=a; return a; } 这种方法实际上就是我们通常的做法,但是对于计算机来说,算乘法的时候并不是这样子计算的。因为计算机内部的二进制的关系,计算乘法也是使用有关二进制的方法。 二进制乘法: 那么计算机是如何通过二进制来进行

2021-09-14 20:04:51 943 2

原创 1894. 找到需要补充粉笔的学生编号

1894. 找到需要补充粉笔的学生编号 贴个题目: 贴个示例: 在这里插入代码片 解题思路: 方法一:一次遍历+模拟 读完题目我们可以看出,其实就是循环派粉笔给学生,直到学生拿不到足够的粉笔,这时候就返回学生的位置。 那么我们可以先求循环一次学生需要多少支粉笔,然后求出派到最后一轮的时候,剩余的粉笔数。 最后就遍历一次数组,一边遍历,一边减少粉笔数,什么时候粉笔数是负数的时候,就证明这一个学生不够粉笔派了,此时返回这一个学生的下标即可。 优化: 我们可以通过取余数来求出最后一轮的时候剩余的粉笔数,这样子

2021-09-10 21:48:30 222

原创 1221. 分割平衡字符串

1221. 分割平衡字符串 贴个题目: 贴个示例: 解题思路: 这一道题,我们得注意题目所给出的字符串本来已经是一个平衡字符串,也就是说字符串中‘R’和‘L’的数量是一样的。 根据以上细节,我们可以用变量letter统计LR的数量,如果只有一边,就增加letter,如果找到另外一边与其配对,就减少letter。 最后每一次letter归0的时候,就有一个平衡字符串。 贴个代码: class Solution { public: int balancedStringSplit(string s)

2021-09-07 10:31:20 164

原创 470. 用 Rand7() 实现 Rand10()

470. 用 Rand7() 实现 Rand10() 贴个题目: 贴个示例: 解题思路: 我觉得有一个题解讲的特别好,大家可以看看他的分析:从最基础的讲起如何做到均匀的生成随机数

2021-09-05 22:55:44 124

原创 剑指Offer 10-1.斐波那契数列

剑指Offer 10-1.斐波那契数列 贴个题目: 贴个示例: 解题思路: 其实斐波那契数列相信大家也不陌生,他是形如以下的数列: 0、 1、1、2、3、5… 其实实际上就是第三项等于前两项相加的和。 我们可以使用动态规划思想来解决这一道题目,由于第三项是等于前两项相加的和,因此我们设立三个变量first,second,third,来分别存储三个值,然后不断迭代更新,最后返回third即可。 那么根据以上思路,我们要注意,数据是否会溢出空间,为了防止数据溢出,题目中其实给出了一个提示:返回值对1e9

2021-09-04 19:15:36 182

原创 剑指 Offer 22.链表中倒数第k个节点

剑指 Offer 22.链表中倒数第k个节点 贴个题目: 贴个示例: 解题思路: 思路一:使用指针数组储存 既然题目要求倒序输出某一个节点,那我们可以用一个指针数组储存所有的指针,然后从尾部返回第k个即可。 思路一代码: /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* getKt

2021-09-02 09:15:42 160

原创 611.有效三角形的个数

611.有效三角形的个数 贴个题目: 贴个示例: 解题思路: 这道题目,涉及了一个初二的数学知识: 三角形的两边之和大于第三边: 即:a+b>c 也就是这一道题,我们需要做的是,使用两条边,找到第三条边是符合这个条件的,就可以被称为“有效三角形” 综上,我们可以排序之后使用双指针,left指针指向第一条边,right指向第二条边,然后寻找符合条件的第三条边,通过移动left和right指针,就可以得出所有的“有效三角形”。 特殊情况:当数组的长度小于3的时候,都不能组成三角形,更别提“有效三角

2021-08-30 07:33:52 661

原创 1588. 所有奇数长度子数组的和

1588. 所有奇数长度子数组的和 贴个题目: 贴个示例: 解题思路: 首先看到题目是计算奇数长度的子数组的总和,因此我们可以通过前缀和的思想来进行求解。 具体过程就是: 1、首先创建一个长度为arrSize+1的数组nums,nums第一个元素为0,然后求出arr中每一位的前缀和 nums[i]=nums[i-1]+arr[i-1]; 2、紧接着,处理一些特殊情况,我们可以从示例中看出: (1)如果arr长度小于3的时候,只需要返回数组和,因此此时子数组只能由一个元素组成。 (2)如果arr长度刚

2021-08-29 22:07:25 441

原创 1732. 找到最高海拔

1732. 找到最高海拔 贴个题目: 贴个示例: 解题思路: 这道题其实就是利用前缀和的思想,因为是从0海拔开始,因此我们要创建一个新的数组,长度为gainSize+1,模拟自行车手走的每一步之后的海拔高度。 贴个代码: int largestAltitude(int* gain, int gainSize){ int arr[gainSize+1]; arr[0]=0; int max=arr[0];//使用max记录最大海拔 for(int i=1;i<gain

2021-08-27 10:35:47 214

原创 1480. 一维数组的动态和

1480. 一维数组的动态和 贴个题目: 贴个示例: 解题思路: 这一道题很明显就是求这个数组的前缀和,所谓前缀和,就是求当前位置到初始位置的和,由此可以得出: nums[i]=nums[i-1]+nums[i] 贴个代码: /** * Note: The returned array must be malloced, assume caller calls free(). */ int* runningSum(int* nums, int numsSize, int* returnSize)

2021-08-27 10:16:37 140

原创 881. 救生艇

881. 救生艇 贴个题目: 贴个示例: 解题思路: 这一道题用到的编程思想是:贪心算法和二分算法。 由于每艘船只能载两个人,因此我们只需要分析最重的人和最轻的人能不能做同一艘船就可以。 基于以上的思想,我们要将people数组进行排序,然后比较最轻和最重的人能不能载同一艘船,如果可以,就到下一对,如果不可以,就证明最重的人得自己做一艘船。 我们可以使用双指针,left指向轻的那边,right指向重的那边,然后如果轻+重小于限制重量,我们就left和right同时向中间移动,否则就只移动right,一边

2021-08-26 16:08:00 182

原创 50. Pow(x,n)

50. Pow(x,n) 贴个题目: 贴个示例: 解题思路: 这一题,用个开玩笑的做法就是直接return pow(x,n),这是最赖皮的做法。但是题目本来就要求你写一个pow函数,所以我们要用其他方法。 直接遍历是可以的,但是呢,会超出时间限制,因此我们要想一种方法,能够减少时间复杂度。 收到二分法的启发,我们可以进行类似于以下的计算: x,xx,xxxx……因此就会有递归式:myPow(x*x,n/2) 那么上述的递归式,是n为偶数的情况,当n为奇数的时候又应该怎么样呢?由于n为奇数,因此我们可以先

2021-08-25 15:57:20 196

原创 58.最后一个单词的长度

58.最后一个单词的长度 贴个题目: 贴个示例: 解题思路: 题目要求的是最后一个单词,因此我们可以从后往前遍历,只要是不是空格就length++,是空格就直接break 但是看了示例,需要注意的是,有可能一开始就会遇到空格,直接跳出,导致统计的单词长度是0,答案错误 发现了以上的问题,我们只需要加上一个判断条件,只有在length!=0的情况下才break 贴个代码: int lengthOfLastWord(char * s){ int len=strlen(s); int leng

2021-08-25 10:36:16 132

原创 541. 反转字符串II

541. 反转字符串II 贴个题目: 贴个示例: 解题思路: 这一道题目,其实就是在原数组上进行模拟反转,最后返回原数组即可。 那么首先写一个交换两个字符的函数swap,需要注意的是用一个中间值temp储存其中一个地址,不用指针。 然后有一个就是交换函数,利用双指针的思想,我们可以用l指向要交换部分的头部,用r指向要交换部分的尾部,交换一个之后就双指针中间夹,最后循环条件就是当l<r。 最后就是根据条件设定交换规则 1、每2k个交换前k个 2、剩余部分小于k个就全部交换 3、剩余部分大于且等于k

2021-08-25 09:58:38 123

原创 1646. 获取生成数组中的最大值

1646. 获取生成数组中的最大值 贴个题目: 贴个示例: 解题思路: 这一道题目,乍看还以为有什么数学规律,后来才发现利用题目中的条件进行模拟就好,在模拟过程中,使用一个max 但是根据官方题解:官方题解:1646. 获取生成数组中的最大值 我们可以把题目条件进行化简,贴一个图片: 理解应该是没问题的,实现代码在官方题解中有提到,就不赘述。 贴个代码: int getMaximumGenerated(int n){ if(n==0) return 0; int nums[n+1];

2021-08-24 15:19:45 146

原创 443. 压缩字符串

443. 压缩字符串 贴个题目: 贴个示例: 解题思路: 这一题主要思想就是双指针 1、left定位当前数据,然后right就往后找,如果字符与left相同,那就right就向后移动。 2、统计相同字符结束之后,更新left指针到right处,然后right要更新到left右边一个 那么根据题目要求,我们还需要index记录每一次压缩字符之后的坐标,然后复制当前正在统计的字符以及他的数量 ...

2021-08-22 23:42:59 118

原创 264. 丑数 II

264. 丑数 II 贴个题目: 贴个示例: 解题思路: 这道题目,默认第一个丑数是1,那么其实就是使用动态规划,让每一位乘2、3、5,并且选取其中的最小值。 那么我们就定义三个指针,p2、p3、p5分别代表质因数2、3、5,下一个丑数就是当前指针指向丑数乘对应的质因数得到的。 意思就是说,如果你这一次指针选择了乘2,那么p2就要向下一位 类推,若这一次指针选择了乘3,那么p3就要向下一位 若这一次指针选择了乘5,那么p5就要向下一位 最后return 最后一个就好 贴个代码: int nthUglyN

2021-08-17 21:25:06 141

原创 551. 学生出勤记录 I

551. 学生出勤记录 I 贴个题目: 贴个示例: 解题思路: 首先看只有同时满足两个条件才能满足,那么我们就是遍历一次,判断这两个条件,一旦有一个条件不成立,就return false,最后遍历完成之后,如果都没有违背这两个条件就return true。 贴个代码: bool checkRecord(char * s){ int len=strlen(s); int absent=0; int late=1; for(int i=0;i<len;i++)

2021-08-17 01:18:57 179

原创 263.丑数

263. 丑数 贴个题目: 贴个示例: 解题思路 这题才是真正的简单题,之前力扣的简单题都是些什么玩意儿 根据丑数的定义:质因数只有2、3、5的数 那么我们知道只需要n一直整除这三个数,最后n==1的时候,n就是丑数 注意当n为负数或0的时候,一定不是丑数 根据以上分析,我们可以写出代码: 贴个代码: bool isUgly(int n){ if(n<=0) return false; while(n%2==0) n/=2; while(n%3==0) n/=3;

2021-08-16 22:46:42 112

原创 如何在MacBook中的vs code中调用GMP包

如何在MacBook中的vs code中调用GMP包 一、什么是GMP包? GMP包是一个著名的多精度算数的Library,能够解决C语言中高精度计算的一些问题 详细介绍请查看官网:The GNU Multiple Precision Arithmetic Library 二、安装GMP包 1、安装vs code 关于如何在MacBook中安装配置vs code的C与C++环境,请查看我的另外一篇文章:Mac配置VS code的C/C++、Java环境 2、官网下载gmp 在GMP官网下面有一个选项:

2021-08-16 12:15:07 804

原创 1137.第N个泰波那契数

1137. 第N个泰波那契数 贴个题目: 贴个示例: 解题思路: 这一题和斐波那契数列数列其实本质上是一样的,不过多了一个变量而已,相信大家都做过斐波那契数列,知道有两种方法:1、动态规划,2、递归 1、动态规划: 首先我们来介绍动态规划,为什么要用动态规划呢?因为动态规划比递归更加省时间,它能够减少递归那些重复计算的步骤。 我们使用t1代表第一个变量,t2代表第二个变量,t3代表第三个变量,中间应该用一个temp存储t3的值,因为t3=t1+t2+t3的时候会把t3给覆盖掉。 其实就是利用滚动数组的

2021-08-08 10:22:25 144

原创 167. 两数之和 II - 输入有序数组

167. 两数之和 II - 输入有序数组 贴个题目: 贴个示例: 解题思路: 1、双指针: 由于这是一个已经排好序的数组,因此两数相加==target,那么那两个数肯定是一个在左边,一个在右边,我们只需要弄两个指针,一个从头,一个从尾,向中间靠拢,直到找出两数之和的对应下标即可 贴代码: /** * Note: The returned array must be malloced, assume caller calls free(). */ int* twoSum(int* numbers,

2021-08-07 11:17:37 212

原创 581. 最短无序连续子数组

581. 最短无序连续子数组 贴个题目: 贴个示例: 解题思路: 1、 排序+对比数组: 题目要求我们找最小的连续子数组,,而且这个最小的连续子数组排序之后能够让原数组升序,那么我们可以复制这个数组numcpy,然后进行排序升序,让result等于数组长度,从头遍历剪掉头,从后遍历剪掉尾,最后得判断result,如果result小于0,那就说明整个数组已经排好序了,所以返回0,大于0就返回result。 2、代码: //qsort的compare函数:升序排序 int compare(const voi

2021-08-06 14:21:05 264

原创 1736. 替换隐藏数字得到的最晚时间

1736. 替换隐藏数字得到的最晚时间 贴个题目: 贴个示例: 解题思路: 这题其实没什么变化,感觉没好说的,就把所有的情况都包括起来了就行。 冒号后面的分钟最大值必然是59,无论如何都不会变的 重点是在冒号前面: 如果小时第一位是2,那么分最大是3,否则最大是9 如果两位同时为?,那么直接最大就是23 贴个代码: char * maximumTime(char * time){ //如果小时同时为?,那么最大是23 if(time[0]=='?'&&time[1]=='?

2021-07-24 18:20:16 126

原创 1893. 检查是否区域内所有整数都被覆盖

1893. 检查是否区域内所有整数都被覆盖 贴个题目: 贴个示例: 解题思路: 第一种:暴力AC法+哈希表 使用哈希表对二维数组中的范围进行记录,然后从left遍历到right,如果都有记录,就返回true,一旦一个没有记录那就返回false 贴个代码: bool isCovered(int** ranges, int rangesSize, int* rangesColSize, int left, int right){ int arr[52];//题目有给定长度 memset(ar

2021-07-23 22:13:03 144

原创 剑指 Offer 52. 两个链表的第一个公共节点

剑指 Offer 52. 两个链表的第一个公共节点 贴个题目 贴个示例 解题思路: 这一道题我觉得官方题解解释的很清楚,大家可以参考一下:两个链表的第一个公共节点 其中证明是十分精彩的: 贴个代码: /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode *getIntersectionNo

2021-07-21 22:01:54 111

原创 69. x的平方根

69. x的平方根 贴个题目: 贴个示例: 解题思路: 这一题,一开始想到的就是简单粗暴直接从1~x遍历,但是会超时,因此考虑到遍历过程中出现了升序的序列,因此可以用二分查找 这里的二分查找返回的是右边界,因此需要-1 还有0和1这两个特殊值需要特殊的照顾 贴个代码: int binarySearch(int num) { if(num==1) return 1;//特殊情况特殊处理 if(num==0) return 0; int left=0; int right=n

2021-07-20 23:08:14 126

原创 1877. 数组中最大数对和的最小值

1877. 数组中最大数对和的最小值 贴个题目: 贴个示例: 解题思路: 吐槽一下:经典我看不懂题目想让我干嘛?但是看懂了又很简单?什么叫做:“最大数对和最小”? 后来结合示例想一想,应该是让数对的组成平均的前提下,求出最大数对和。 什么叫做数对组成平均呢? 我是这么理解的,就是数对比较对称,看示例2大概就能明白我的意思。 那么搞清楚题意之后,其实就很简单啦: 先排序,然后排序,然后求关于数组中间对称的数对和最大值 贴代码: int cmp(const void *a,const void *b)

2021-07-20 19:14:39 130

原创 剑指offer 42. 连续子数组的最大和

剑指offer 42. 连续子数组的最大和 题目简介: 题目示例: 解题思路: 这一题求连续子数组的最大值,可以把问题归类于局部最优解,也就是说这一题我们使用的方法就是动态规划。 动态规划问题,最重要的是就是找出动态规划方程,开始分析问题: 连续的子数组,其实就是确定是要前面的子数组还是重新开始一个子数组,因此状态方程应该是: dp(i)=fmax(dp(i−1)+nums[i],nums[i]) 根据状态方程可知: 1、从具体实现步骤来讲,我们需要确定,到第i个元素,下一个加不加,因此有: curr

2021-07-17 21:39:54 133

原创 34. 在排序数组中查找元素的第一个和最后一个位置

34. 在排序数组中查找元素的第一个和最后一个位置 贴个题目: 贴示例: 解题思路: 这一道题的解题思路其实和我之前做过一个题目是一样的,只是返回值不同,具体可以看:剑指 Offer 53 - I. 在排序数组中查找数字 I 只是多了一个判断下标是否符合规则,下面直接贴代码。 贴代码: /** * Note: The returned array must be malloced, assume caller calls free(). */ int binarySearch(int *nums,i

2021-07-16 21:41:56 135

原创 剑指 Offer 53 - I. 在排序数组中查找数字 I

剑指 Offer 53 - I. 在排序数组中查找数字 I 贴个题目: 贴个示例: 解题思路: 第一种:暴力解题法 暴力解题,我直接遍历数组,统计有多少个 代码: int search(int* nums, int numsSize, int target){ int sum=0; for(int i=0;i<numsSize;i++) { if(nums[i]==target) sum++; } return sum; } 性能分析:

2021-07-16 21:18:07 178

原创 645. 错误的集合

645. 错误的集合 贴个题目: 贴个示例: 解题思路: 哈希表法: 首先来读一下题目:题目意思就是我本来有一个包含1~n的数组,顺序不定,但是呢被一个集合打乱且复制其中一个元素,形成了新的数组 请我们找出这个重复元素和缺失的元素 那么由上可以得出,新建一个数组reNums,长度为2: int *reNums=(int *)malloc(sizeof(int)*2) *returnSize=2 然后用哈希表,统计原数组的元素 重复元素个数是2,没有出现的元素个数应该为0 根据这个我们就可以找到那重

2021-07-15 16:29:38 186

空空如也

空空如也

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

TA关注的人

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