zoukankan      html  css  js  c++  java
  • 1089. 复写零

    给你一个长度固定的整数数组 arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。
    
    注意:请不要在超过该数组长度的位置写入元素。
    
    要求:请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。
    
     
    
    示例 1:
    
    输入:[1,0,2,3,0,4,5,0]
    输出:null
    解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]
    示例 2:
    
    输入:[1,2,3]
    输出:null
    解释:调用函数后,输入的数组将被修改为:[1,2,3]
     
    
    提示:
    
    1 <= arr.length <= 10000
    0 <= arr[i] <= 9
    
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/duplicate-zeros

     

    代码如下:

    时间复杂度O(n),空间复杂度O(1)。

     1 func duplicateZeros(_ arr: inout [Int]) {
     2         // 数组为空 或 只有1个元素时,直接返回
     3         if arr.count < 2 {
     4             return
     5         }
     6         
     7        // 本次遍历目的:找出可复写0的个数
     8         var i = 0, j = 0
     9         while j < arr.count {
    10             if arr[i] == 0 {
    11                 j += 1
    12             }
    13             i += 1
    14             j += 1
    15         }
    16         
    17         // 没有元素为0;
    18         if i == j {
    19             return
    20         }
    21         // 当且仅当最后一个元素为0 
    22         else if i == arr.count-1 && j > arr.count {
    23             return
    24         }
    25         
    26         // i,j回到下次遍历的开始位置
    27         i -= 1
    28         j -= 1
    29         while i >= 0 {
    30             if j < arr.count {
    31                 arr[j] = arr[i]
    32             }
    33             if arr[i] == 0 {
    34                 j -= 1
    35                 arr[j] = arr[i]
    36             }
    37             
    38             i -= 1
    39             j -= 1
    40         }
    41     }

     

     

      

  • 相关阅读:
    依赖注入简单解释
    设计模式
    Git 命令使用
    手机版自适应
    自定义属性的添加
    innerText Textcontent浏览器兼容代码
    获取间的内容
    密码长度为6-10的判断
    模拟输入框
    排他功能
  • 原文地址:https://www.cnblogs.com/mustard22/p/11128446.html
Copyright © 2011-2022 走看看