当前位置:网站首页>LeetCode·283.移除零·双指针
LeetCode·283.移除零·双指针
2022-08-10 18:29:00 【小迅想变强】
链接:https://leetcode.cn/problems/move-zeroes/solution/by-xun-ge-v-6eoq/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目
示例
思路
解题思路
双指针
移动数组中 0 元素,题目给定数组为指针,说明nums指向原始数组的地址,我们修改nums相当于修改了nums指向的地址,所以返回修改之后nums长度即可
对于本题我们定义两个指针,一个指向数组,遍历数组所有元素,当数组元素等于0时,另外一个指针将当前位置之后的所有元素都向前移位,相当于删除操作,最后将后序0补上
双指针优化
在上述解法中,我们需要遍历还需要搬运元素,时间复杂度为O(n^2),我们可以将遍历和搬运简化到一个循环中,定义双指针,当数组元素相同时,慢指针留着当前位置,快指针进行前进,直到不相等时,将快指针指向位置搬运到当前慢指针位置,最后将后序0补上
代码
void moveZeroes(int* nums, int numsSize){
int i, j;
for(i = 0, j = 0; i < numsSize; i++)//遍历数组
{
if(nums[i] == 0)//为0情况
{
continue;
}
nums[j++] = nums[i];
}
while(j < numsSize)//补上0
{
nums[j++] = 0;
}
return;
}
作者:xun-ge-v
链接:https://leetcode.cn/problems/move-zeroes/solution/by-xun-ge-v-6eoq/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
边栏推荐
猜你喜欢
随机推荐
从企业的视角来看,数据中台到底意味着什么?
FPGA工程师面试试题集锦61~70
入门:人脸专集2 | 人脸关键点检测汇总(文末有相关文章链接)
常量
postgis空间数据导入及可视化
const的自己理解
定时器循环展示数组
Keil5退出仿真调试卡死的解决办法
Unity_Stack<T>()的应用(多个次级界面后的返回逻辑)
Qt学习第三天
20220810
容器化 | 在 S3 实现定时备份
开源一夏 | mysql5.7 安装部署 -二进制安装
pyspark columns merge into one row
#yyds干货盘点# 面试必刷TOP101:二分查找-I
C#/VB.NET 将PDF转为PDF/X-1a:2001
「POJ 3666」Making the Grade 题解(两种做法)
补坑简单图论题
905. 区间选点(贪心)
搭建自己的以图搜图系统 (一):10 行代码搞定以图搜图