自定义博客皮肤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 910 2

原创 CINTA 作业八

中国剩余定理CRT

2021-12-02 17:09:25 877 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​∈G1、充分性:存在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 946

原创 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 470

原创 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=c2、若ab=ac,则b=c两边同时乘同一个:a(-1)则有a(-1)ab=a(-1)ac由a(-1)a=e得eb=ec由单位元的唯一性得b=cCH6 习题四证明命题6.7

2021-11-02 22:25:55 209

原创 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 192 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 507 1

原创 CINTA 作业二:GCD与EGCD

CINTA 作业二:GCD与EGCD1、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 146 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 658 2

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

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

2021-09-10 21:48:30 104

原创 1221. 分割平衡字符串

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

2021-09-07 10:31:20 69

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

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

2021-09-05 22:55:44 41

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

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

2021-09-04 19:15:36 100

原创 剑指 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 59

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

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

2021-08-30 07:33:52 472

原创 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 265

原创 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 114

原创 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 65

原创 881. 救生艇

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

2021-08-26 16:08:00 89

原创 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 103

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

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

2021-08-25 10:36:16 54

原创 541. 反转字符串II

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

2021-08-25 09:58:38 46

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

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

2021-08-24 15:19:45 64

原创 443. 压缩字符串

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

2021-08-22 23:42:59 55

原创 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 61

原创 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 59

原创 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 43

原创 如何在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 498

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

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

2021-08-08 10:22:25 52

原创 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 79

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

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

2021-08-06 14:21:05 159

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

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

2021-07-24 18:20:16 50

原创 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 70

原创 剑指 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 45

原创 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 47

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

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

2021-07-20 19:14:39 56

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

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

2021-07-17 21:39:54 56

原创 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 56

原创 剑指 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 91

原创 645. 错误的集合

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

2021-07-15 16:29:38 64

空空如也

空空如也

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

TA关注的人

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