🔥个人主页:@草莓熊Lotso
🎬作者简介:C++研发方向学习者
📖个人专栏: 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》
⭐️人生格言:生活是默默的坚持,毅力是永久的享受。
前言:在之前的C语言刷题集中我们刷了很多IO类型的基础编程题,但是随着数据结构往后的学习以及企业面试的要求,我们还需要对接口型的题目进行练习,博主在这里准备了新的《LeetCode刷题指南》专栏给大家分享一些我自己在力扣上面写过的题目,提供一些我的解题思路。个人实力有限,欢迎大家补充和指正。
目录
1.消失的数字
思路:使用异或的方法
解题过程:
1.这题的思路有点类似于单身狗数,但是会难一点,我们先定义一个变量ret初始化为0,把它和数组中的所有元素异或
2.注意0异或任何数都还是那个数本身,两个相同的数异或后为0,还有就是异或支持交换律。
3.所以我们再将异或完数组中所有元素的ret和0到numsSize所有数异或,如果是数组中存在的数这时候就都会变为0,最后只会剩下数组中消失的那个元素了,返回ret即可。
具体解题过程图示如下:
复杂度:
- 时间复杂度:O(N)
- 空间复杂度:O(1)
代码演示:
int missingNumber(int* nums, int numsSize) {
int ret=0;
for(int i=0;i<numsSize;i++)
{
ret^=nums[i];
}
for(int j=0;j<=numsSize;j++)
{
ret^=j;
}
return ret;
}
2.轮转数组
思路:
使用三次逆置实现数组的轮转,第一次逆置前n-k个,第二次逆置后k个,最后整体逆置一次
解题过程:
1.先实现一个数组逆置的函数,利用双指针交换法,两个指针分别指向数组首尾,交换后向中间移动,直到相遇时结束
2.有了逆置函数之后,我们就可以通过调用这个函数来实现我们的三次逆置了
--第一次逆置前n-k个,那我们传的左下标就是0,右下标是numsSize-1-k
--第二次逆置后k个,那我们传的左下标就是numsSize-k,右下标是numsSize-1
--最后一次整体逆置,我们传的左下标是0,右下标是numsSize-1,也就是数组的开头和结尾
3.这里需要考虑到k大于numsSize的情况,可能会存在一些问题,我们只需要用k%numsSize就可以很好的解决掉了,而且不会影响到k小于numsSize的情况
具体解题过程图示如下:
复杂度:
- 时间复杂度:O(N)
- 空间复杂度:O(1)
代码演示:
void reverse(int*nums,int left,int right)
{
while(left<right)
{
int temp=nums[left];
nums[left]=nums[right];
nums[right]=temp;
left++;
right--;
}
}
void rotate(int* nums, int numsSize, int k) {
k=k%numsSize;
reverse(nums,0,numsSize-1-k);
reverse(nums,numsSize-k,numsSize-1);
reverse(nums,0,numsSize-1);
}
3. 移除元素
思路:
使用双指针实现元素的移除,一个指针用来记录删除指定元素后的数组,一个用来遍历数组找需要删的元素
解题过程:
1.先定义两个指针,dest和cur,利用cur去遍历这个数组
- 当数组当前元素不等于需要移除的元素时,用dest记录下来,将cur指针指向的元素复制到dest指针的位置,然后dest和cur都++指向下一个位置
- 当数组当前元素等于需要移除的元素时,dest不动,cur++继续判断下一个元素
2.右指针遍历完输入的数组后,dest的值就算符合条件的输出数组的长度
具体解题过程图示如下:
复杂度:
- 时间复杂度:O(N)
- 空间复杂度:O(1)
代码演示:
int removeElement(int* nums, int numsSize, int val) {
int dest=0;
int cur=0;
while(cur<numsSize)
{
if(nums[cur]!=val)
{
nums[dest++]=nums[cur++];
}
else
{
cur++;
}
}
return dest;
}
往期回顾:
结语:本篇文章就到此结束了,《LetetCode刷题指南》中的第一篇博客题目比起之间的C语言刷题集中的题目,肯定会更加复杂一些。而且题目形式也不一样,大家需要注意一下,在这里推荐大家先看看往期回顾中的算法复杂度这篇博客,对其有初步的了解,很多题目都会对复杂度有一定的要求。如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。