- 博客(61)
- 收藏
- 关注
原创 牛客网KY111 日期差值
如果两个年份不相等,计算出较大年份(year2)的天数,以及较小年份(year1)剩余的天数,再计算两个年份中间所有年的总天数,将三者相加再加1即为所求天数;如果两个年份相等,分别计算两者的天数,相减再加1即为所求天数。(加1是因为题目要求)有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD。每组数据输出一行,即日期差值。
2024-03-20 17:38:36 295 1
原创 牛客网KY258 日期累加
直接简单的思路:首先累加的天数(days)减去当前月份剩余天数(months[month]-day),若差值小于零,则月份不变,日期(day)加上累加天数(days)即所求日期;需要注意的是,循环过程中月份可能会大于12,此时年份(year)需要加一,并且月份重置为1;年份变化时,还需要再次判断是否为闰年,若为闰年二月份天数改为29,否则改为28(如果没有改为28,当年份为闰年且加上若干天后变为平年时,在进入循环之前二月份天数被改为29,在while循环体内判断为平年,此时二月份天数仍为29,是错误的)。
2024-03-20 15:16:41 350
原创 牛客网KY222 打印日期
在计算之前需要判断当前年份是否为闰年,若为闰年则二月份天数改为29天,否则为28天。然后用总天数依次减去每个月的天数,由此得到月份和日期。题目要求输出格式为“yyyy-mm-dd”,打印时使用“%02d”格式说明符,表示如果输出的长度小于2则前面补0。可能有多组测试数据,对于每组数据, 按 yyyy-mm-dd的格式将输入中对应的日期打印出来。输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。给出年分m和一年中的第n天,算出第n天是几月几号。
2024-03-12 16:01:45 319
原创 牛客网KY19 今年的第几天?
首先要注意到闰年的二月份有29天,所以在计算天数之前需要判断当前年份是否为闰年。为了方便计算,将每个月份的天数保存到一维数组中,计算时只需读出保存的数据进行累加即可。另外,当前年份为闰年时建议直接将数组对应月份天数修改,而不是总天数加1,否则计算闰年二月份某天的总天数时,会多加一天。输入可能有多组测试数据,对于每一组测试数据, 输出一个整数,代表Input中的年、月、日对应本年的第几天。包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。
2024-03-12 15:27:02 219
原创 牛客网KY156 百鸡问题
用小于等于n元去买100只鸡,大鸡5元/只,小鸡3元/只,还有1/3元每只的一种小鸡,分别记为x只,y只,z只。编程求解x,y,z所有可能解。对于每组输入,请输出x,y,z所有可行解,按照x,y,z依次增大的顺序输出。根据题目条件直接使用嵌套循环暴力求解,运算时注意小数。测试数据有多组,输入n。
2024-03-12 14:23:07 255
原创 牛客网KY50 与7无关的数
一个正整数,如果它能被7整除,或者它的十进制表示法中某个位数上的数字为7, 则称其为与7相关的数.现求所有小于等于n(n<100)的与7无关的正整数的平方和。最直接最简单的想法就是一位一位判断是否含有7,再判断是否能被7整除,枚举出所有符合条件的数,并求它们的平方和。对于每个测试案例输入为一行,正整数n,(n<100)对于每个测试案例输出一行,输出小于等于n的与7无关的正整数的平方和。
2024-03-12 11:21:32 191
原创 牛客网KY267 对称平方数1
具有对称性质的数实际上就是自身等于其反序数的数,例如1221。所以可以直接使用之前求反序数的函数,判断一个数是否等于其反序数,相等就输出,不等直接跳过判断下一个数。打印所有不超过256,其平方具有对称性质的数。如2,11就是这样的数,因为2*2=4,11*11=121。输出具有题目要求的性质的数。如果输出数据不止一组,各组数据之间以回车隔开。
2024-03-12 10:55:56 280
原创 牛客网KY266 反序数
题目明确了N是一个四位数,且其9倍等于其反序数,所以N的千位和个位均不能为0。直接暴力求解,枚举出所有可能,每当遇到符合题目要求的解就输出。还有一种更简便的方法,由题意可知,N的取值范围为1000~9999,所以用一层循环即可解决问题。这种方法需要求写一个函数来求出反序数。设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321)求N的值。输出题目要求的四位数,如果结果有多组,则每组结果之间以回车隔开。程序无任何输入数据。
2024-03-11 17:48:04 247
原创 牛客网KY15 abc
设a、b、c均是0到9之间的数字,abc、bcc是两个三位数,且有:abc+bcc=532。求满足条件的所有a、b、c的值。请输出所有满足题目条件的a、b、c的值。a、b、c之间用空格隔开。写完后发现判等表达式还可以简化为:a*100+b*110+c*12 == 532。直接暴力求解,枚举出所有的可能,每当遇到符合题目要求的解就输出它。
2024-03-11 17:27:09 252
原创 栈和队列基本实现
栈时一种特殊的线性表,。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守(Last In First Out)的原则。
2024-01-04 15:41:33 352
原创 力扣232. 用栈实现队列
根据栈后进先出的性质,可将两个栈分别设置为只压入元素的栈和只弹出元素的栈,以此来满足队列先进先出的性质。请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(
2024-01-03 17:56:19 564
原创 力扣225. 用队列实现栈
将元素压入栈顶,即将元素插入队尾,注意要插入到不为空的队列中,如果两个队列均为空,随便插入一个队列即可。取栈顶元素时,将不空队列中的元素插入空队列中,当不空队列中只剩下一个元素时,该元素为栈顶元素。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(
2024-01-03 16:59:06 593
原创 线性表之链表
链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。顺序表的存储位置可以用一个简单直观的公式表示,它可以随机存取表中任意一个元素,但插入和删除需要移动大量元素。链式存储线性表时,不需要使用地址连续的存储单元,即不要求逻辑上相邻的元素在物理位置上也相邻,它通过“链”建立起元素之间的逻辑关系,因此插入和删除操作不需要移动元素,只需要修改指针,这也意味着链表失去了可随机存取的特点。
2023-07-23 21:38:21 213
原创 力扣138. 复制带随机指针的链表
从途中可以看出,当结点的random指针不为空时,拷贝结点的random指针指向对应原结点的random指针指向的结点的next,即copy->random = cur->random->next。新节点的next指针和random指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够。最后,将拷贝结点进行尾插,得到深拷贝链表,然后恢复原链表,断开拷贝结点和原链表的链接。解题步骤分为三步,首先将原链表的所有结点拷贝一份,并插入在对应的原结点后面。复制链表中的指针都不应指向原链表中的节点。
2023-07-21 15:42:20 113
原创 控制语句之分支和循环
控制语句用于控制程序的执行流程,以实现程序的顺序结构、选择结构和循环结构,它们由特定的语句定义符组成。C语言有九种控制语句,可以分为以下3类:(1)分支语句:if语句、switch语句(2)循环执行语句:do while语句、while语句、for语句;(3)转向语句:break语句、goto语句、continue语句、return语句。
2023-07-18 16:53:03 131
原创 力扣142. 环形链表 II
slow进环之后,fast一定会在一圈之内追上slow,因为slow和fast之间的距离最大是C,而slow和fast每移动一次,它们俩之间的距离就会减1,所以在slow移动一圈之前fast一定会追上。假设链表起始结点head到环起始结点head'的距离为L,环起始结点head'到快慢指针相遇结点meet的距离为X,环的长度为C,则meet到head'的距离为C-X。方法一:设置两个指针,一个指针指向链表头结点,一个指针指向判环时快慢指针相遇的位置,然后两个指针同时走,它们会在环的第一个结点处相遇。
2023-07-17 20:34:51 415
原创 力扣141. 环形链表
第二个问题,如果链表有环,slow走1步,fast走3步时,fast比slow先进环。slow进环后,fast开始追赶slow,slow每走1步、fast每走3步,fast和slow之间的距离减少2步。假设环的长度为C,此时fast与slow的距离为C-1,如果C-1为偶数,slow和fast一定会相遇;第一个问题,如果链表有环,slow走1步,fast走2步时,fast比slow先进环。slow进环后,fast开始追赶slow,slow每走1步、fast每走2步,slow和fast之间的距离减少1步。
2023-07-16 20:22:28 560
原创 力扣160. 相交链表
假设两个单链表的长度分别为lenA和lenB,设置两个指针分别指向两个链表的头结点,让指向较长链表的指针先走abs(lenA-lenB)步,然后两个指针再同时向后走,边走边比较指针所指结点的地址是否相等,若相等则返回当前结点,若不等则同时向后走一步,直到找到第一个相交结点为止。,不能是X字型,如果是X字型,则相交结点有两个后继结点,而单链表结点只能有一个后继结点。因此可得出,若两个单链表相交,则两个链表的尾结点的地址一定相同;首先,我们应该明确如果两个单链表相交,那么这两个链表的形状只能是。
2023-07-16 19:30:14 517
原创 牛客网OR36 链表的回文结构
先找到链表的中间结点,然后将链表的后半段进行逆置,再依次比较链表的前半段和后半段,如果相同则返回true,如果不同则返回false。给定一个链表的头指针head,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。寻找链表中间节点具体分析。
2023-07-15 20:15:29 301
原创 牛客网CM11 链表分割
可以不用讨论lesstail和greatertail为空的情况,简化问题。注意,两个链表合并之后,greatertail的next需要置空,因为结点仍保留着之前的链接关系,下面示例刚好greatertail的next为空指针。设置两个新链表,把小于x的结点全部尾插到第一个链表中,大于等于x的结点全部尾插到第二个链表中,最后在把两个链表链接起来,返回第一个链表的头指针。pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且。,返回重新排列后的链表的头指针。
2023-07-14 21:31:12 268
原创 力扣21. 合并两个有序链表
设置两个指针head和tail,head用来指向新链表的头结点,tail用来进行新链表的尾插。比较两个链表,取较小的结点进行尾插。注意,当有一个链表为空时,直接返回另一个非空链表;当有一个链表先为空时,tail直接指向非空链表,合并结束,返回head。新链表是通过拼接给定的两个链表的所有节点组成的。将两个升序链表合并为一个新的。
2023-07-14 17:26:53 410
原创 牛客网 链表中倒数第k个结点
设置2个指针fast和slow,让fast先往后走k步,然后slow和fast同时向后移动,当fast指向空指针时,slow指向倒数第k个结点。注意,当链表为空时或者当k大于链表长度时,应当返回空指针,所以在while循环体一开始首先判断fast是否为空,若为空则返回NULL,否则程序继续。输入一个链表,输出该链表中倒数第k个结点。
2023-07-12 20:48:36 55
原创 力扣206. 反转链表
当n2不为空时,n2指向n1,然后n1 、n2、n3同时向后移动一个位置,以此类推,直至n2指向空结点,此时n1为反转后链表的头结点。注意,当原链表为空时,n3是非法的,所以应当分两种情况讨论,链表为空时直接返回空指针,不为空时按照上述方法执行。当cur不为空时,next指向下一个元素,cur的next指向newhead,然后把cur赋给newhead,变为新链表的头结点,cur再指向next,以此类推,直至cur指向空结点,此时newhead为反转后的链表的头结点。,请你反转链表,并返回反转后的链表。
2023-07-12 19:35:01 435
原创 初识c语言
简单了解c语言的基础知识,对c语言有大致了解,后续会更新每个知识点详细讲解。C语言是一门面向过程的、抽象化的通用计算机编程语言,广泛应用于底层开发。常用的编译器有GCC、MSVC。定义变量的基本格式为“数据类型 变量名”。例如:int age;在定义变量时还可以为其赋值。例如:int year = 2023;#define定义常量基本形式:#define 标识符 常量标识符为所定义的宏名,常量可以是常数、字符串等。#define定义宏基本形式:#define 宏名(参数列表) 字符串。
2023-07-12 17:02:46 218
原创 力扣876. 链表的中间结点
设置快慢指针slow和fast,slow每次走一步,fast每次走两步,当fast走完时,slow刚好指到链表中间结点。从下图中可以看出,当链表结点个数为奇数时,fast指向链表尾结点,slow刚好指向中间节点;当链表结点个数为偶数时,fast指向NULL,slow刚好指向第二个中间结点。所以循环的条件为 while(fast && fast->next),最后返回slow即可。请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
2023-07-11 17:49:24 253
原创 力扣88合并两个有序数组
分别设置3个指针end1、end2、tmp,end1指向nums1中最后一个非0元素,end2指向nums2中最后一个元素,tmp指向nums1中最后一个元素。当nums1和nums2都不为空时,比较nums1[end1]和nums2[end2],如果nums1[end1]>nums2[end2],nums1[tmp]=nums1[end1],tmp--,end1--;如果nums1[end1]<nums2[end2],nums1[tmp]=nums2[end2],tmp--,end2--。
2023-07-07 18:29:41 64
原创 力扣26删除有序数组中的重复项
1、分别设置3个指针src1、src2、dst,src1和dst指向数组第一个元素,src2指向数组第二个元素。若不同,则把src2的值赋给dst+1所指的位置,然后dst++,src1++。2、设置2个指针src和dst,dst指向数组第一个元素,src指向数组元素第二个元素。若不同,则把src所指元素赋给dst+1所指位置,然后dst++,src++。链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array。
2023-07-07 15:45:05 51
原创 力扣27移除元素
链接:https://leetcode.cn/problems/remove-element。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。移除所有数值等于val的元素,并返回移除后数组的新长度。给你一个数组nums和一个值val,你需要。时间复杂度O(N^2),空间复杂度O(1)时间复杂度O(N),空间复杂度O(1)不要使用额外的数组空间,你必须仅使用。额外空间并原地修改输入数组。
2023-06-28 18:04:22 66
原创 线性表之顺序表
因为在初始化顺序表的时候只申请了4个SLDataType大小的空间,当插入第5个数据时,顺序表容量不够,就会出现错误。所以在插入之前需要检查一下顺序表的容量,如果顺序表容量不够,则扩容,扩大到原来顺序表容量的二倍。首先找到指定位置,然后把指定位置及后面的数据全部后移一位,最后将指定数据放入指定位置,有效数据元素个数加1。如图,顺序表中有5个元素,但删除了6次,当再插入3个元素时,只成功插入2个元素。在顺序表头部插入数据,在插入之前同样需要检查顺序表的容量,而且需要将表中原有的数据后移一个位置。
2023-06-27 21:29:35 63
原创 c语言——杨氏矩阵
思路2:右上角是一行中最大的数,同时是一列中最小的数。将待查找的数字与二维数组右上角比较,如果比右上角数字小,列数减1;如果比右上角数字大,行数加1。题目:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。思路1:一行一行比较,当遇到比num更大的数字时,转入下一行继续比较。要求:时间复杂度小于O(N)。
2023-03-31 15:31:16 84
原创 c语言——左旋字符串
思路3:将前k个字符以此赋给字符串后k位,然后把前k个字符标记为'*',打印的时候略过'*'直接打印后面字符,字符串需分配足够空间。思路2:分为三步:第一,把k个字符左旋;第二,把其余字符左旋;第三,整个字符串左旋。题目:实现一个函数,可以左旋字符串中的k个字符。思路1:每次左旋1个字符,重复k次。
2023-03-31 14:28:23 66
原创 c语言——调整奇数偶数顺序
题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。思路2:使用数组下标,left从前向后找偶数,right从后向前找奇数,找到后交换。思路3:设置两个指针,左指针从前向后找偶数,右指针从后向前找奇数,找到后交换。思路1:遍历数组,分别找出所有的偶数、所有的奇数,再拷贝到原数组中。
2023-03-30 09:49:28 250
原创 c语言——字符串函数
2.c语言中库函数调用失败时,会将错误码存放在一个名为errno的变量中,把errno中的错误码翻译成错误信息,就可以知道调用库函数时发生什么错误。1.目标字符串必须以' \0 '结束,源字符串追加在目标字符串中' \0 '以后的位置上。1.函数找到str中的下一个标记,并将其用' \0 '结尾,返回一个指向这个标记的指针。2.如果需要拷贝字符的个数大于源字符串的长度,其余用' \0 '填充。2.返回' \0 '之前的字符个数,不包含' \0 '4.如果字符串中不存在更多的标记,则返回NULL。
2023-03-29 20:53:50 198
原创 数组和指针
sizeof()是在编译阶段计算结果,括号里面的表达式不会进行,看最后表达式的类型决定大小。5、strlen()是库函数,计算字符串长度,从传入地址开始计数,直到遇到'\0'计数停止。strlen()在运行阶段才能计算,返回值类型是无符号的整数类型。从地址值的角度来看,&数组名和首元素地址是一样的,但意义不同。&数组名的类型是数组指针,数组名和&数组名[i]的类型是指针。&数组名——取出的是整个数组的地址。1、数组是存储多个相同类型数据的集合,数组的大小取决于数组的元素个数和元素类型。
2023-03-16 17:17:07 76
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人