![](https://img-blog.csdnimg.cn/8d044f971961495da0e51be44a720c86.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
每日一题
文章平均质量分 64
每日一个算法题目的练习和讲解提高自己的编程能力!
随风飘扬@
这个作者很懒,什么都没留下…
展开
-
C语言每日一题:16:数对。
1.x,y均不大于n,就是小于等于n。2.x%y大于等于k。3.一般的思路使用双for循环去遍历每一对数。我们的运行结果是我们在vs2022下测试代码的结果是正确的什么说明我们的代码思路是没有问题可以计算出结果但是呢,题目要求时间限制是1s,在vs运行出结果至少用了十秒。说明我们的时间复杂度过高当n比较大时时间复杂度是特别高的。原创 2023-08-12 00:17:13 · 1161 阅读 · 4 评论 -
C语言每日一题:13《数据结构》环形链表。
我们的距离改变是依靠相对速度而产生的相对距离。当相对速度为1的时候我们只要存在环就一定可以相遇。快指针(fast)速度为2.慢指针(slow)速度为1.原创 2023-08-03 18:03:23 · 620 阅读 · 2 评论 -
C语言每日一题:14《数据结构》复制带随机指针的链表
2.两个链表同时遍历,遍历老链表的时候去寻找相对位置,在遍历新的链表找到随机值赋值。1.复制一个新的链表出来遍历老的节点给新的节点赋值,random这个时候不去值。原创 2023-08-05 12:30:41 · 576 阅读 · 3 评论 -
C语言每日一题:15:寻找峰值。
【代码】C语言每日一题:寻找峰值。原创 2023-08-10 18:33:46 · 415 阅读 · 7 评论 -
C语言每日一题:12《数据结构》相交链表。
注意初始化lenA和lenB为1,判断下一个节点是空是可以保留尾节点的。长度会少一个,尾节点没有进入循环就不会++;8.如果出现最后一个才相交的情况那么循环走到两个链表的节点都走到空才可以结束保证最后一个节点是被判断的。5.假设一个长一个短,并且定义名称代表长度的新的链表头。2.使用两个循环获取一下长度,同时可以获取到尾节点。4.计算长度差的绝对值,因为不知道谁大谁小。1.如果最后一个节点相同说明一定有交点。(保留位节点是判断是否链表相交);注意(循环遍历不要动参数)7.进行长的先走差距步。原创 2023-08-01 17:32:10 · 707 阅读 · 3 评论 -
C语言每日一题:10.不使用+-*/实现加法+找到所有数组中消失的数。
6.当nums的最后一个不是n就需要有一个k<=n的一个判断条件如果没有的化(n2是nums中单个数的元素个数)[num[n2-1],n]这些数值是会失去找不到的。2.只有两个1才是进位,所以使用与的方法获取要进的位之后进行左移动。1.两个数二进制之间进行异或如果不产生进位操作那么两个数的和就是就是两个数进行异或的结果。3.如果数组被遍历完全动没有相等的值那么说明这个外面循环的这个数不存在于数组中。4.循环判断按位与的结果为0的时候说明两个数相加不存在进位。1.不允许开辟额外的空间,因为有连续的数值存在。原创 2023-08-01 12:10:29 · 600 阅读 · 2 评论 -
C语言每日一题:9.《数据结构》链表的中间节点+链表的倒数第k个节点。
2.先循环遍历后指针k让后指针向后移动k次,前后指针再用相同的速度向后同时移动,当后指针为空时就结束,这个时候的前指针就是倒数第k个节点。1.第一遍遍历链表,直到找到尾结束第一次遍历,遍历的过程中记录链表长度。1.第一遍遍历链表,直到找到尾结束第一次遍历,遍历的过程中记录链表长度。1.相对距离的使用,定义一个前面的指针和后指针,初始都是在头节点。3.再一次去遍历我们的数组,找到倒数第k个,返回节点。3.再一次去遍历我们的数组,找到中间节点,返回节点。1.定义一个慢指针和一个快指针。原创 2023-07-30 23:54:35 · 355 阅读 · 0 评论 -
C语言每日一题:11.《数据结构》链表分割。
5.进行链表合并,注意第二个链表的尾的下一个需要置空防止成环。6.free两个头之前需要保存新的满足条件的单链表的头。4.当其中一个链表没有数据的时候返回另一个链表的第一个。2.两个链表都有数据,链表初始化头和尾是需要判断的。3.两个链表都有数据那么跟上一个在链接上是差不多的。1.构建两个新的带头链表,头节点不存储数据。4.大于等于x尾插到第二个链表。3.小于x的尾插到第一个链表。2.循环遍历原来的链表。1.有一些地方需要更改。原创 2023-08-01 16:29:53 · 891 阅读 · 0 评论 -
C语言每日一题:8.除自身以外数组的乘积。
(先不考虑题目的要求循序渐进的方法)1.动态开辟数组,初始化数组内容为全1.2.使用双for循环去给answer赋值。3.在相同位置不去*=对应的下标位置的数组值,而是*=1;总结:时间复杂度是O(N^2)空间复杂度 O(1)(不包括开辟的数组);那么非常明显这个算法的时间复杂度比较高在遇到非常大的测试用例的时候就超出时间的限制。原创 2023-07-28 11:33:53 · 254 阅读 · 5 评论 -
C语言每日一题:6.移除元素+合并两个有序数组。
一:暴力查找的方法:1.找到对应val值的下标,返回数组的下标。2.删除对应的下标,从前向后用后面覆盖前面。当后一个是数组最后一个数值是就赋值结束了(注意数组越界的问题)。3.删除了一个数之后数组元素个数要–。4.查找和删除是在一个循环里面因为val的值可能在数组中出现多次,直到返回的下标的值没有了,就结束了循环,val的数值都移除完了。原创 2023-07-26 18:03:32 · 226 阅读 · 1 评论 -
C语言每日一题:7.寻找数组中心下标。
时间复杂度:O(2(N^2))时间复杂度比较高。2.循环下标ps从头到位,定义四个变量分别是left sum_left,right,sum_right…2.循环下标ps从头到位,定义3个变量分别是 sum_left,right,sum_right…4,这个sum_left+=nums[ps-1]当前的数值中心下标的值是不参与计算的。4.循环结尾判断sum_left==sum_right;4.循环结尾判断sum_left==sum_right;3.初始化left=ps-1和right=ps+1.当ps。原创 2023-07-26 23:59:13 · 757 阅读 · 1 评论 -
C语言每日一题:5.至少是其他数字的两倍+两个数组的交集。
3.比较的过程中一个元素已经在之前放进这个数组里面了这个数值是不可以添加进来的。5.注意题目的特殊情况是数组中只存在一个元素的时候,这个时候默认他就是最大的直接返回下标0.1.需要我们返回最大数值的下标,所以先循环遍历我们的这个数组记录一下最大的数值和下标位置。但是有这样的一个情况。1.动态开辟一个数组去保存我们的相同的值,定义一个变量k控制这个数组的变化。3所以排序之后的数组的倒数第二个元素就是除了最后一个元素在数组中最大的。1.可以使用双指针的方法在一次循环遍历中就找到最大的数和次大的数值。原创 2023-07-26 14:31:29 · 429 阅读 · 0 评论 -
C语言每日一题:4.消失的数字+数字在升序数组中出现的次数+整数转换
5.找到了这个K数的位置我们mid下标向右移动直到下一个不是停止到k的位置停止,左边同理。1.定义sum1和sum2分别作为0到n所有数值的和,和0到n除了消失数字的和。2.如果是一直循环注意数组越界,如果不是那么当前的数组的数值+1就是消失的数。1.使用qsort排序数组判断当前数值+1是否是数组下一个元素的数值。1.A,B中有一个为负数,所以需要加上符号位的1.1.定义一个x,先与数组中的每一个内容按位与。2.然后x再与,0到n的所有数值进行按位与。2.A,B同正或者同负,直接返回统计的结果。原创 2023-07-24 21:15:00 · 709 阅读 · 0 评论 -
C语言每日一题:3.错误的集合
1.1.排序+遍历拿到我们重复的数值的同时去遍历数组一遍,求和重复的数字只加入一遍,和设置为sum1;2.求没有消失的和,等差数列求和公式(1+n)*n/2,定义为sum2;2.定义一个x分别和数组的内容,以及1到n的内容按位与。4.我们同时知道重复的数值所以消失的数值就获取到了。3.可以得到重复的数值和消失的数值的按位与的结果。3.sum2-sum1就是消失的数值。1.排序+遍历拿到我们重复的数值。这个方法的时间复杂度比较高。原创 2023-07-23 20:49:08 · 286 阅读 · 0 评论 -
C语言每日一题:2.记负均正
3.有负数有正数有0的时候,计算正数的个数。2.当记录的正数是0(负数的个数+0的个数==n)的时候平均值直接输出0.0。1 , 2,-1,-2,0,5 有正数有负数有0的情况。1.在输入的过程中可以记录负数的个数,零的个数。-1,-2,-3,-4,0,0 没有正数的情况。-1 ,-2,-4,-5 全部都是负数的情况。1,2,3,4,5 ,0,0,没有负数的情况。0,0,0,,0,0,0,全部都是0的情况。1,2,3,4,5,全部都是正数的情况。1 ,2,-1,-2,有正数有负数。2.可以出现3种情况。原创 2023-07-22 18:05:30 · 214 阅读 · 0 评论 -
C语言每日一题:1.证明尼克彻斯定理。
/比如说4^2==16;//2.当n是偶数n^2不存在这个连续的奇数中但是,这个数值是最中间的数值。2.因为他们都是连续的奇数可以把它写成另一种方法,每一个数之间相差2。//1.当n是奇数n^2存在这个连续的奇数中并且是中间的数值。3.64-(2+4+6)=52–>52/4等于13。4.这样的话我们就找到了连续奇数的第一个数字。//3.定义一个数组去从中间向两边去赋值。1.假设输入的n==4计算4^3=64.0.输入一个值作为n。原创 2023-07-21 16:03:21 · 84 阅读 · 0 评论