习题
文章平均质量分 52
个人刷题记录
星鸦wyk
这个作者很懒,什么都没留下…
展开
-
链表的使用(2)
原创 2022-05-16 17:56:31 · 261 阅读 · 5 评论 -
链表的使用(1)
上一篇说过会找一些OJ题目来看看单链表的使用,题目挺多,计划分成两篇目录1.反转单链表2.链表中间节点3.链表的倒数第k个节点4.合并两个有序链表5.链表的回文结构1.反转单链表思路:上一篇写的单链表里面讲过怎么实现头插法,而这里的反转链表就是将头节点后面的节点依次放到前面来,因为需要进行多次头插,所以需要另外一个节点来记录当前头插的节点的下一个节点代码如下:class Solution { public ListNode revers...原创 2022-05-10 20:05:43 · 312 阅读 · 4 评论 -
String类方法的使用
上一篇介绍完String类,这里找到了几道关于字符串的题目,来熟悉下String类方法在解题过程中的使用目录1.第一个只出现一次的字符2.字符串最后一个单词的长度3.验证回文串4.字符集合1.第一个只出现一次的字符题目说明字符串s中只包含小写字符思路:新建一个int数组,数组的0下标表示字母a,1下标表示祖母b,以此类推。遍历字符串,字母出现一次就让int数组对应的下标的元素的值+1。再次遍历字符串,若int数组对应的下标的元素的值为1,返回字符串下标原创 2022-04-28 17:21:45 · 838 阅读 · 7 评论 -
【力扣】——找到所有数组中消失的数字
题目描述:整数数组nums有n个元素,其中数组中的元素nums[i]取值范围在区间[1,n]内,要求找出所有在[1,n]范围内但没有出现在数组nums中的数字,并以数组的形式返回结果。思路分析:先来看看数组有什么特点:数组nums的特点是数组中所有的元素的值不会大于数组的元素的个数基于这个特点,我们可以用数组元素的值来代替下标,即nums[nums[i]-1](-1是因为下标从0开始),我们让所有nums[nums[i]-1]的值再加上数组的元素的个数,那么没有在nums中出现的数字对应原创 2022-02-07 16:31:16 · 282 阅读 · 11 评论 -
【力扣】——寻找数组的中心下标
题目描述:给你一个整数数组 nums ,请计算数组的 中心下标 。数组中心下标是数组的一个下标,下标左侧的所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1思路分析:假设在数组下标为i的位置找到了数组的中心下标,arr[i]左边元素的和称为sum1,arr[i]右边元素的和..原创 2022-02-03 20:01:01 · 590 阅读 · 7 评论 -
【牛客网】——数对
题目描述:牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。牛牛希望你能帮他计算一共有多少个可能的数对。输入正整数n和k,输出一个正整数表示可能的输出数量分析:将x和y要满足的条件提取出来1.x<=n且y<=n2.x%y>=k思路1:根据上述条件可以建立循环,遍历所有的数进行寻找,理论上可以完成,但效率过低思路2:首先将x的可能取值范围..原创 2022-02-01 18:08:38 · 1390 阅读 · 6 评论 -
【力扣】——盛水最多的容器
题目描述:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器在给出思路之前先翻译一下这题要求的是什么,我们要求的是数组任意两个元素之间形成的矩形的面积,并返回矩形面积最大的那个值思路分析: 双指针假设左边元素是arr[left],右边是arr[right],那么矩形原创 2022-01-28 20:35:58 · 1032 阅读 · 8 评论 -
用for循环打印各种图案
最近在做for循环的题目,有一些关于用for循环来打印的图案的练习个人觉得比较有意思,选一些有代表性的来分享自己的解法这种题目一般主要框架就是for循环里面再嵌套for循环,最重要的是for循环的判断条件,大致框架如下int n接收输入的数字for(int i=0; ? ;++i){ for(int j=0; ? ;++j) { ?; } printf("\n");}打印正方形这题很基础,每行打印的“*”固定,判断条件也比较好找原创 2021-10-30 21:00:45 · 11174 阅读 · 2 评论 -
【力扣】——轮转数组
题目描述:给定一个非负整数k,输出数组nums右移k位后的结果示例如下:思路1:以上图数组为例,假设k=1,前面的元素右移另nums[end]=nums[end-1]即可,在这个过程中nums[end]位置的原数据会被覆盖,且数组的首元素的值也不对,结果如图:所以需要另外一个变量记录nums[end]的原数据,最后赋值给nums[0]右移k次就是重复上述操作k次代码如下:void rotate(int* nums, int numsSize, int k){ .原创 2022-01-16 18:41:39 · 270 阅读 · 11 评论 -
力扣刷题(丢失的数字和移动零)
目录1.丢失的数字2.移动零1.丢失的数字题目描述:一个数组nums包含从0到n的整数,但其中丢失了一个数字,要求建立函数找出这个丢失的数字思路1:先排序,后查找对数组进行排序,排序后遍历找出那个丢失的数字这么做可以解决,但如果数组元素过多的话这种方法就会耗费过多的时间思路2:0~n的数字进行求和,数组中的元素也进行求和,二者相减,求出来的差便是丢失的数字代码如下:int missingNumber(int* nums, int numsSize){ i原创 2021-12-01 18:38:26 · 780 阅读 · 2 评论 -
【力扣】——数组中数字出现的次数
题目描述:一个整型数组nums里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。思路:这个题目就是对位运算的考察,下面使用示例1给的数组来说明,数组arr:[4,1,1,6]首先将数组arr中的所有的元素进行异或操作,因为数组除了两个数字只出现一次外,其它数字都出现了两次,根据异或的性质(n^n=0,0^n=n),异或后得出来的结果就是数组中出现一次的两个数字进行异或,即ret=4^64^6的结果为2,那么就是..原创 2021-12-14 20:10:10 · 1703 阅读 · 4 评论 -
【牛客网】等差数列
在牛客网上找到的两道关于等差数列的题目,两个题目均可以用等差数列的前n项和公式来进行求解目录1.等差数列2.尼科彻斯定理1.等差数列题目描述:等差数列a1=2,d=3,输入正整数n(多组输入),输出前n项和如图:思路分析:回想一下关于等差数列的前n项和公式1.2.这里已知a1和d,很显然使用第二个求和公式代码如下:#include<stdio.h>int main(){ int n=0; while(scanf("%.原创 2022-01-14 16:41:26 · 901 阅读 · 12 评论 -
【力扣】——解码异或后的数组
题目描述:数组arr由n个非负整数组成,经编码后变为长度为n - 1的另一个整数数组encoded,其中encoded[i] = arr[i]^arr[i + 1]给你编码后的数组encoded和原数组arr的第一个元素first(arr[0])。请解码返回原数组arr。可以证明答案存在并且是唯一的。思路:对于异或来说,若a^b=c,那么就有a^c=b、b^c=a(在解题时找出的规律,后面会解释),所以除arr[0]为first外,arr[i]=arr[i-1]*enc...原创 2021-12-11 16:28:27 · 715 阅读 · 4 评论 -
力扣题——主要元素
题目描述:数组中占比超过一半的元素称为主要元素,现在给你一个整数数组,找出数组中的主要元素,若没有则返回-1思路:删除数组中相邻的两个不同的数假设有一个数组arr,arr中的元素为[3,3,3,1,4],arr中3是主要元素,因为3的占比超过了一半,所以即使是最坏的情况(剩下的元素和3一起被删除),最后剩下来的依旧是3但剩下来的数不一定是主要元素,假设arr中所有的元素都只出现过一次,那么剩下来的数便不是主要元素所以需要再遍历一次数组,统计剩下的元素在数组中出现的个数,如果出现的..原创 2021-12-02 19:05:42 · 602 阅读 · 6 评论 -
【力扣】——分割平衡字符串
题目描述:在一个平衡字符串中,'L'和'R'字符的数量是相同的。给你一个平衡字符串s,请你将它分割成尽可能多的平衡字符串。分割得到的每个字符串都必须是平衡字符串,且分割得到的平衡字符串是原平衡字符串的连续子串。返回可以通过分割得到的平衡字符串的最大数量。思路:先来分析一下:题目要求子串也是平衡字符串,也就是说子串中“L”和“R”的 数量也是相等的,而且子串必须连续,就是说不能通过分割之后拼接来获得子串基于以上分析,这题的思路就出来了,从“L”和“R”的个数相等入手...原创 2021-12-13 20:11:02 · 619 阅读 · 5 评论 -
求小和问题
题目描述:一个数组中,每一个数左边比当前的数小的数累加起来叫做这个数组的小和例:数组[1 5 268]1左边没有比1小的数:05左边1比5小:12左边1比2小:16左边1、5、2比6小:1+5+2=88左边1、5、2、6比8小:1+5+2+6=14小和为0+1+1+8+14=24思路:我们先来看一下小和是由哪些数字组成的在上述例子中:1出现了4次,5出现2次,2出现两次,6出现一次就是说小和的值=4*1+5*2+2*2+61出现4次是因为右边的4个数都比1..原创 2021-12-09 20:50:04 · 351 阅读 · 2 评论 -
【牛客网】——旋转数组的最小数字
题目描述:有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。要求空间复杂度为O(1),时间复杂度为O(logn)这个题目官方给出的解法是二分法,具体怎么使用如下:首先来分析“非降序数组”,数组既然不是降序的,那么可能有以下几种情况:1.数组元素升序2.数组所有元素的值相等3.数组大体原创 2022-01-17 16:32:56 · 649 阅读 · 5 评论 -
寻找数组局部最小值
关于局部最小值的定义这里不做过多赘述,假设arr[i]是数组的局部最小值,那么只需记住arr[i]<=arr[i+1]且arr[i]<=arr[i-1]即可思路:二分法没错,就是二分法,即使数组是无序的也可以使用二分法还是来分析一下:下列两种情况,局部最小值是不需要我们寻找的1.arr[0]<=arr[1]2.arr[end-1]>=arr[end]此时只需将arr[0]或arr[end]打印出来即可,其余情况都需要我们来找到局部最小值我们建立直角坐标原创 2021-12-23 17:09:26 · 998 阅读 · 11 评论