- 博客(11)
- 收藏
- 关注
原创 6-6 单链表分段逆转
其中List/* 指针即结点位置 *//* 存储数据*//*线性表中下一个元素的位置 *//* 单链表头指针 */int length;/* 表长 */函数接口定义中,ElemSet是用户定义的数据类型,例如 int、double 或者 char 等;list是给定的带头结点的单链表,k是每段的长度。函数K_Reverse应将list中的结点按要求分段逆转。
2025-03-24 16:04:45
176
原创 LeetCode.283.移动零
原理如下:一开始左右指针指向同一个位置,若未遇到零,则二者一同往下遍历;若遇到了零,则左指针不动,有指针继续往后遍历,遍历到非零的值时,交换左指针指的零与右指针指的非零。如此往复,便可将数组中的元素按相对顺序排好,零排到后面。在官方题解中,虽然也是双指针,但是是左右双指针,利用交换来做。分析:依照先前的做法,依然用快慢双指针。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。,编写一个函数将所有。
2025-03-18 10:44:39
438
原创 LeetCode.026.删除有序数组中的重复项
分析:根据上题经验,双指针基本可以满足。需要改动的地方就是快慢指针的移动条件与初值。最后返回的slow是数组最后一个的索引,并不是长度所以还要加一。,返回删除后数组的新长度。删除重复出现的元素,使每个元素。
2025-03-18 09:32:01
259
原创 LeetCode.027.移除元素
我们注意到,当快指针的值不等于指定值,慢指针与快指针一同往后遍历;当快指针的值等于指定值,那么快指针自行往下遍历,慢指针不动,相当于把特定值给跳过了。如此往复,快指针遍历完数组后,慢指针对应的将数组完成了删除特定值。最后只需要返回慢指针就是数组的大小。值得注意的是,在进行完一次删除操作后要把数组的长度相应的减一,并且遍历下标也需要减一,否则会跳过一个数。在阅读完一定材料后,知道还可以用双指针来解决该类问题。元素的顺序可能发生改变。
2025-03-18 09:09:23
315
原创 LeetCode.367.有效的完全平方数
是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。不能使用任何内置的库函数,如。是一个完全平方数,则返回。
2025-03-17 22:25:41
190
原创 LeetCode.069.x的平方根
方法一:可以使用二分查找来快速找到平方根的。值得注意的是在判别中值的大小时,会将中值平方,此时若仍用int类型将会超过存储大小,应该用long long int。方法二:本来是在熟练二分查找的,没想到还有个牛顿迭代法,感觉有点意思。所谓牛顿迭代法,就是就是利用切线无线接近零点,具体解释可以到leetcode看解法。不允许使用任何内置指数函数和算符,例如。下述代码中xi就是切线与零点的交点。由于返回类型是整数,结果只保留。
2025-03-13 09:13:59
381
原创 LeetCode.034.在排序数据中查找元素的第一个位置和最后一个位置
对于非递减的数组,其数字由小到大排列,并且有重复,我们在二分的时候,要让mid值尽量往左走,就是在改变左右边界的时候,当mid的值与target相等时,我们要让右边界向左移,这样我们就可以向左找头。那么我们的头节点的值就可以顺利表示出来。分析:看到时间复杂度首先想到二分查找,以往的二分查找找到target就直接返回了,但这次我们需要的是一个区间,所以最好是返回这个区间的头节点或者尾节点。考虑特殊情况,如果进来的数组是空的话,无论target取什么值,我们都找不到,就会返回{-1, -1}.
2025-03-11 14:37:07
255
原创 奇数值结点链表(c语言)
函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。函数getodd将单链表L中奇数值的结点分离出来,重新组成一个新的链表。返回指向新链表头结点的指针,同时将L中存储的地址改为删除了奇数值结点后的链表的头结点地址(所以要传入L的指针)。
2025-03-11 00:17:25
812
原创 LeetCode.035.搜索插入位置
也可以直接返回right + 1,因为right总是会在插入位置的左边一位,分左右两种情况考虑,要么left向右移一位因为target太大;二分部分没问题,最后返回了右边界right,类比左闭右闭,相对的因为左闭右开,则right就是上一中情况的right + 1。若nums[mid]小于等于target,则代表target应插入在mid后面一个位置,返回mid + 1;若nums[mid]大于等于target,则代表target应插入在mid当前的位置,返回mid;请必须使用时间复杂度为。
2025-03-06 09:23:31
250
原创 LeetCode.704.二分查找
那么在while 中 (i <= j)没问题,当i == j时,代表左右边界重合取到最终值。// i代表左边界,j代表右边界。经过调察发现可能是边界而引起的超时,在第一版中用的是左闭右闭的形式[left,right]在查阅资料的时候发现,二分查找还有另外一种编写方式,就是左闭右开[left,right)给了nums的数组,想要用二分查找首先要知道最大的左右边界,即nums中的元素个数。,避免了直接相加可能产生的溢出问题。但是在之后的改变左右区间有问题,若是以原代码的形式,那么i不可能比j小。
2025-03-05 14:18:36
930
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人