21xrx.com
2024-12-22 21:44:36 Sunday
登录
文章检索 我的文章 写文章
C++移动数组中的0到最前端
2023-07-06 13:14:17 深夜i     --     --
C++ 移动数组 0

在C++中移动数组中的0到最前端可以利用双指针的方法来实现。双指针分别指向数组的头部和尾部,然后交替移动指针,直到两个指针相遇为止。

具体实现步骤如下:

1. 定义两个指针i和j,分别指向数组的头和尾。

2. 当i小于j时,进行循环。在循环中,i和j指针交替移动,如果i指向的元素为0,j指向的元素不为0时,交换i和j指向的元素。

3. 如果i指向的元素不为0,i指针向右移动。

4. 如果j指向的元素为0,j指针向左移动。

5. 当i等于j时,循环结束。

实现代码如下:


void moveZeroes(vector<int>& nums) {

  int i = 0, j = nums.size() - 1;

  while (i < j) {

    if (nums[i] == 0 && nums[j] != 0) {

      swap(nums[i], nums[j]);

    }

    if (nums[i] != 0) {

      i++;

    }

    if (nums[j] == 0)

      j--;

    

  }

}

这段代码利用了vector数据结构,可以使用类似数组的下标来访问元素。在循环中,利用swap函数交换两个元素的位置,指针移动则是通过i++和j--操作来实现的。

这种方法可以有效地将数组中的0移动到开头,保证非零元素的相对位置不变。如果需要将0移动到末尾,只需将交换条件改为i指向的元素不为0,j指向的元素为0即可。

总之,双指针法是移动数组中元素的一个常用方法,能够大大简化代码,并且具有较高的执行效率。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章