[Algorithm][双指针][复写零]详细解读 + 代码实现

  1. 先找到最后一个"复写"的数
    • 先判断cur位置的值
    • 决定dest向后移动一步或者两步
    • 处理边界情况,if(num[n - 2] == 0)
      • num[n - 1] = 0
      • cur--;
      • dest -= 2;
    • 判断dest是否到末尾
    • cur++;
  2. "从后向前"完成复写操作
void DuplicateZeros(vector<int>& arr) 
{
    int cur = 0, dest = -1;
    int n = arr.size();

    // 找最后一个"复写"位置
    while(cur < n)
    {
        if(arr[cur])
        {
            dest++;
        }
        else
        {
            dest += 2;
        }

        if(dest >= n - 1)
        {
            break;
        }

        cur++;
    }

    // 处理一下边界情况
    if(dest == n)
    {
        arr[n - 1] = 0;
        cur--;
        dest -= 2;
    }

    // 从后往前复写
    while(cur >= 0)
    {
        if(arr[cur])
        {
            arr[dest--] = arr[cur--];
        }
        else
        {
            arr[dest--] = 0;
            arr[dest--] = 0;
            cur--;
        }
    }
}

相关推荐

  1. [Algorithm][指针][复写]详细解读 + 代码实现

    2024-04-08 10:24:03       43 阅读
  2. 【力扣】复写,栈+指针

    2024-04-08 10:24:03       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-08 10:24:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-08 10:24:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-08 10:24:03       82 阅读
  4. Python语言-面向对象

    2024-04-08 10:24:03       91 阅读

热门阅读

  1. 比赛记录:Codeforces Global Round 25 A~E (猜猜题场)

    2024-04-08 10:24:03       29 阅读
  2. Solr面试题

    2024-04-08 10:24:03       33 阅读
  3. 缓存更新策略

    2024-04-08 10:24:03       33 阅读
  4. P1308 统计单词数

    2024-04-08 10:24:03       36 阅读
  5. 工业视觉AI应用总结记录

    2024-04-08 10:24:03       26 阅读
  6. Android14系统go版添加微件功能

    2024-04-08 10:24:03       28 阅读
  7. 数字孪生与深度学习交融

    2024-04-08 10:24:03       35 阅读