栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

力扣每日一题2022-06-17简单题:复写零

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

力扣每日一题2022-06-17简单题:复写零

复写零
    • 题目描述
    • 思路
      • 双指针
        • Python实现
        • Java实现
        • C++


题目描述

复写零


思路 双指针

正常情况下,可以新开一个栈来存储复写零后的数据。但是题目要求原地修改,所以不能这么做。可以使用双指针来分别指向栈顶位置和现在需要放置的元素位置即可。使用top标记栈顶,i标记现在放元素的位置,正着遍历记录一下元素位置,再倒着遍历就可以逐个去掉多余的元素,补充0进入栈。

Python实现
class Solution:
    def duplicateZeros(self, arr: List[int]) -> None:
        """
        Do not return anything, modify arr in-place instead.
        """
        n = len(arr)
        top, i = 0, -1
        while top < n:
            i += 1
            top += 1 if arr[i] else 2
        j = n-1
        if top == n+1:
            arr[j] = 0
            j -= 1
            i -= 1
        while j >= 0:
            arr[j] = arr[i]
            j -= 1
            if arr[i] == 0:
                arr[j] = arr[i]
                j -= 1
            i -= 1
Java实现
class Solution {
    public void duplicateZeros(int[] arr) {
        int n = arr.length, top = 0, i = -1;
        while (top < n) {
            i++;
            if (arr[i] != 0) {
                top++;
            } else {
                top += 2;
            }
        }
        int j = n-1;
        if (top == n+1) {
            arr[j] = 0;
            j--;
            i--;
        }
        while (j >= 0) {
            arr[j] = arr[i];
            j--;
            if (arr[i] == 0) {
                arr[j] = arr[i];
                j--;
            }
            i--;
        }
    }
}
C++
class Solution {
public:
    void duplicateZeros(vector& arr) {
        int n = arr.size(), top = 0, i = -1;
        while (top < n) {
            i++;
            if (arr[i] !=0) {
                top++;
            } else {
                top += 2;
            }
        }
        int j = n-1;
        if (top == n+1) {
            arr[j] = 0;
            j--;
            i--;
        }
        while (j >= 0) {
            arr[j] = arr[i];
            j--;
            if (!arr[i]) {
                arr[j] = arr[i];
                j--;
            }
            i--;
        }
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976457.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号