
刷题集
文章平均质量分 75
经典题目的解答
sushang~
不积跬步,无以至千里;不积小流,无以成江海。
展开
-
leetcode141.环形链表,142环形链表ii
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。1圈之内,fast必然追上slow,因为他们之间距离每次缩小1,不会错过,slow走1圈,fast都走了2圈了,肯定追上了。slow进环以后,fast开始追击slow,slow每走1步,fast每走2步,他们之间距离缩小1。slow进环以后,fast开始追击slow,slow每走1步,fast每走3步,他们之间距离缩小2。不一定,fast会先进环,slow会后进环,假设slow进环时,slow和fast之间的距离为N。原创 2025-03-02 15:41:22 · 856 阅读 · 0 评论 -
leetcode106.相交链表
先分别找listA链表和listB链表的尾,如果尾节点相等,那么就是相交链表,不是就直接返回NULL,然后分别计算链表的长度,让长的链表先走他们的长度差值步,然后再同时走,如果走到节点的地址是一样的话,那么就是相交的节点。遍历listA链表,将listA链表中的每个值与listB链表中每个节点的值进行比较,比较节点地址相等的话就是交点。如果 listA 和 listB 有交点,intersectVal == listA[skipA] == listB[skipB]listA 中节点数目为 m。原创 2025-03-02 13:53:02 · 717 阅读 · 0 评论 -
leetcode876.链表的中间结点
定义个slow的慢指针,每次往后面走一个,定义一个fast的快指针,每次往后面走两个。当奇数个数据的时候,fast的next走到空就停止,当偶数个数据的时候,fast走到空就停止。给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。链表的结点数范围是 [1, 100]原创 2025-02-20 23:02:13 · 345 阅读 · 0 评论 -
leetcode88.合并两个有序数组
在数组1中使用end1指针,数组2中使用end2t指针,两个数组从后往前进行比较,将比较后数组中较小的数进行尾插(放到数组1的最后面),当数组1先结束的时候,需要将数组2中的数依次全部拷贝到数组1中,当数组2先结束的时候,就不需要进行拷贝。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。重新额外开辟一个数组存放合并后的值。给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。原创 2025-02-17 22:51:22 · 771 阅读 · 0 评论 -
leetcode27.删除有序数组中的重复项
使用src1,src2和dst指针,如果src1与src2所指向的内容相等时,那么就src++,如果当src1与src2不相等时,就将a数组中src1中的内容赋值到tmp数组的dst中,让后dst++,然后将src2赋值给src1,最后src2++。在一个数组中使用src和dst两个指针,当src和dst不相等时,那么就++dst,然后将数组a中的src的内容赋值到a数组中的dst中,最后在++src,如果当src和dst相等的时候,那么就直接src++。如果所有断言都通过,那么您的题解将被通过。原创 2025-02-02 13:45:45 · 910 阅读 · 0 评论 -
leetcode27. 移除元素
采用双指针的方法,定义src和dst的指针,当数组中元素的值等于val的时候,src往后面走,不等于val的时候i,就将src中的值放到dst中算法的时间复杂度为O(N),空间复杂度为O(1)采用时间换空间的方法,另外开辟一个新的数组,将原来数组中不等于val的值放到新的数组中去,最后再拷贝回原来的数组。算法的时间复杂度为O(N),空间复杂度为O(N)。然后返回 nums 中与 val 不同的元素的数量。从前往后进行查找,当数组中的值等于val的时候,将数组后面的值依次往前进行挪动。算法的时间复杂度为O(原创 2025-01-26 22:45:18 · 507 阅读 · 0 评论 -
leetcode 189.轮转数组
首先将前n-k个数进行逆置,然后将后k个数进行逆置,最后将整个数组进行整体逆置。算法的时间复杂度为O(N),空间复杂度为O(1)。空间换时间,创建一个临时变量的数组,将旋转后的数字依次放在临时变量的数组中,最后再赋值回去。算法的时间复杂度为O(N),空间复杂度为O(N)给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。暴力求解,每次旋转一个数,旋转K次。算法的时间复杂度为O(你可以使用空间复杂度为O(1)的原地算法解决这个问题吗?),空间复杂度为O(1)。原创 2025-01-19 14:01:38 · 505 阅读 · 0 评论 -
leetcode 面试题 17.04.消失的数字
采用异或的方法,异或的特点是,两个数字进行异或,相同为0不同为1,先将数组中的数字全部异或一遍,再将异或后的结果与0-n中所有的数字异或一遍,最后剩下的那个数字就是消失的数字。算法的时间复杂度为O(N)排序,依次查找,如果下一个数不是上一个数+1,那么上一个数+1就是消失的数字。算法的时间复杂度为0(N*logN)数组nums包含从0到n的所有整数,但其中缺了一个。你有办法在O(n)时间内完成吗?采用0-N等差数列公式进行计算,减去数组中的值,最后剩下的就是那个消失的数字。算法的时间复杂度为O(N)原创 2025-01-18 22:10:53 · 596 阅读 · 0 评论 -
牛客网-替换空格
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。计算出替换后的字符串的长度后,我们可以在原字符串当中,从后往前进行填充。若遇到的不是空格,则将遍历到的字符从后往前进行填充。因为是‘ ’ ->“%20”,是1换3,所以可以先统计原字符串中空格的个数(设为count),然后可以计算出新字符串的长度。因为一个空格字符会被替换为三个字符,所以替换后字符串的新长度new_str=length+2*count。若遇到的是空格,则从后往前填充字符‘0’,‘2’,‘%’原创 2024-04-06 23:26:48 · 424 阅读 · 0 评论 -
牛客JZ39-数组中出现次数超过一半的数字
首先需要考虑数组是否为空的情况,然后对数组从前往后进行抵消,如果相同,计数就+1,不同计数就-1,接着计算最后剩下的数字在整个数组中出现的次数,最后判断这个数出现的次数是否大于数组长度的一半,是就返回数值,否则返回0。首先对整个数组进行排序,然后计算中间数组的值,接着遍历整个数组,对目标值进行次数的统计,最后判断目标值出现的次数是否大于数组长度的一半,是则返回数值,否则返回0.例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。如果不存在则输出0。输入:[1,2,3,2,2,2,5,4,2]原创 2024-04-05 16:53:44 · 607 阅读 · 0 评论 -
牛客JZ21-调整数组顺序使奇数位于偶数前面
可以通过左右下标的方法,left下标找到偶数,right下标找到奇数,然后进行交换,left是奇数就++left,right是偶数就–right,一次类推完成所有数据的交换,但是这种方式是无法保证奇数和奇数,还有偶数和偶数的相对位置不变的。首先遍历整个数组,查找数组中的奇数,找到后将它临时保存起来,然后将该奇数位置之前的所有偶数都向后移动一位,最后将该奇数放到移动后的空闲位置处,依次类推,就可以完成不改变顺序的奇数在前偶数在后的数组排序。输入:[2,4,6,5,7]输入:[1,3,5,6,7]原创 2024-03-26 14:21:29 · 861 阅读 · 0 评论 -
牛客JZ11-旋转数组的最小数字
有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。这个过程会让[left,right]区间缩小,这个过程中,left永远在原数组前半部分,right永远在原数组的后半部分,而范围会一直缩小,当left和right相邻时,right指向的位置,就是最小元素的位置。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。输入:[3,4,5,1,2]原创 2024-03-25 21:43:22 · 932 阅读 · 0 评论 -
leetcode LCR121.寻找目标值-二维数组
我们可以找到行列的交界处,比如[0][2],即数字3这个位置,通过观察,我们可以发现,该数字是所在行中的最大数字,所在列中的最小数字,可以用目标数target和该交界处数字进行比较,:有一个二维数组,数组的每行从左到右都是递增的,每列从上到下都是递增的,在这样的数组中查找一个数字是否存在。直接对该二维数组进行遍历,但该种方法的时间复杂度为。如果用[2][0]也是可以的,思路则反过来。这个题目和杨氏矩阵是一样的。原创 2024-03-24 13:44:45 · 1035 阅读 · 0 评论