您的位置:首页 > 财经 > 金融 > app下载网址进入_国内广告公司_搜索竞价托管_线上推广营销

app下载网址进入_国内广告公司_搜索竞价托管_线上推广营销

2025/6/20 9:45:49 来源:https://blog.csdn.net/2401_85548793/article/details/145998202  浏览:    关键词:app下载网址进入_国内广告公司_搜索竞价托管_线上推广营销
app下载网址进入_国内广告公司_搜索竞价托管_线上推广营销

大家好,我是小卡皮巴拉

文章目录

目录

力扣题目: 

题目描述

解题思路

解题要点

完整代码(C++)

兄弟们共勉 !!! 


每篇前言

博客主页:小卡皮巴拉

咱的口号:🌹小比特,大梦想🌹

作者请求:由于博主水平有限,难免会有错误和不准之处,我也非常渴望知道这些错误,恳请大佬们批评斧正。

力扣题目: 

原题链接:283. 移动零 - 力扣(LeetCode)

题目描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

解题思路

类似于本题这样的数组分块问题,我们都可以采用“双指针”法

通过 cur 和 dest 指针配合完成元素移动。

  1. 指针初始化

    • cur 指针用于遍历数组元素,初始值为 0,从数组第一个元素开始遍历。

    • dest 指针标记已处理好的非零元素的最后位置,初始值为 -1。开始时未找到非零元素,初始化为 -1 便于后续逻辑,找到首个非零元素时,dest 先自增为 0 再交换元素。

  2. 遍历数组处理元素

    • 当 cur 指针遍历数组时,对每个元素 nums[cur] 进行判断。

    • 若 nums[cur] 不为 0,先将 dest 指针后移一位(++dest),再把 nums[cur](当前非零元素)与 nums[dest] 交换,使非零元素放到 dest 指针位置,保持非零元素相对顺序。

    • 若 nums[cur] 为 0,不交换,cur 指针继续后移找下一个非零元素

  3. 得出最终结果

    • cur 指针遍历完数组后,非零元素移到数组前面且保持相对顺序,0 元素自然被移到末尾,因为交换中 0 元素会逐渐被 “挤” 到后面。

解题要点

  1. 双指针策略

    • 定义与作用:cur 遍历数组元素,dest 标记已处理非零元素末尾位置。

    • 初始化:cur 为 0 从首元素开始遍历,dest 为 -1,遇首个非零元素时自增到 0。

  2. 遍历交换逻辑

    • 条件判断:cur 遍历中,nums[cur] 不为 0 时进行交换。

    • 交换操作:nums[cur] 非 0,dest 先自增,再与 nums[cur] 交换。

    • 零元素处理:nums[cur] 为 0 时,cur 直接后移。

  3. 复杂度控制

    • 时间:仅一次遍历,时间复杂度 O(n)。

    • 空间:常数级额外空间,空间复杂度 O(1)。

  4. 适用性拓展:适用于数组元素重排问题,如奇偶分离、移除特定值元素。

完整代码(C++)

class Solution {
public:void moveZeroes(vector<int>& nums) {for(int cur = 0, dest = -1;cur < nums.size();cur++){if(nums[cur])//处理非零元素swap(nums[++dest],nums[cur]);}}
};

兄弟们共勉 !!! 

码字不易,求个三连

抱拳了兄弟们!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com