返回介绍

solution / 1000-1099 / 1089.Duplicate Zeros / README_EN

发布于 2024-06-17 01:03:30 字数 4102 浏览 0 评论 0 收藏 0

1089. Duplicate Zeros

中文文档

Description

Given a fixed-length integer array arr, duplicate each occurrence of zero, shifting the remaining elements to the right.

Note that elements beyond the length of the original array are not written. Do the above modifications to the input array in place and do not return anything.

 

Example 1:

Input: arr = [1,0,2,3,0,4,5,0]
Output: [1,0,0,2,3,0,0,4]
Explanation: After calling your function, the input array is modified to: [1,0,0,2,3,0,0,4]

Example 2:

Input: arr = [1,2,3]
Output: [1,2,3]
Explanation: After calling your function, the input array is modified to: [1,2,3]

 

Constraints:

  • 1 <= arr.length <= 104
  • 0 <= arr[i] <= 9

Solutions

Solution 1

class Solution:
  def duplicateZeros(self, arr: List[int]) -> None:
    """
    Do not return anything, modify arr in-place instead.
    """
    n = len(arr)
    i, k = -1, 0
    while k < n:
      i += 1
      k += 1 if arr[i] else 2
    j = n - 1
    if k == n + 1:
      arr[j] = 0
      i, j = i - 1, j - 1
    while ~j:
      if arr[i] == 0:
        arr[j] = arr[j - 1] = arr[i]
        j -= 1
      else:
        arr[j] = arr[i]
      i, j = i - 1, j - 1
class Solution {
  public void duplicateZeros(int[] arr) {
    int n = arr.length;
    int i = -1, k = 0;
    while (k < n) {
      ++i;
      k += arr[i] > 0 ? 1 : 2;
    }
    int j = n - 1;
    if (k == n + 1) {
      arr[j--] = 0;
      --i;
    }
    while (j >= 0) {
      arr[j] = arr[i];
      if (arr[i] == 0) {
        arr[--j] = arr[i];
      }
      --i;
      --j;
    }
  }
}
class Solution {
public:
  void duplicateZeros(vector<int>& arr) {
    int n = arr.size();
    int i = -1, k = 0;
    while (k < n) {
      ++i;
      k += arr[i] ? 1 : 2;
    }
    int j = n - 1;
    if (k == n + 1) {
      arr[j--] = 0;
      --i;
    }
    while (~j) {
      arr[j] = arr[i];
      if (arr[i] == 0) arr[--j] = arr[i];
      --i;
      --j;
    }
  }
};
func duplicateZeros(arr []int) {
  n := len(arr)
  i, k := -1, 0
  for k < n {
    i, k = i+1, k+1
    if arr[i] == 0 {
      k++
    }
  }
  j := n - 1
  if k == n+1 {
    arr[j] = 0
    i, j = i-1, j-1
  }
  for j >= 0 {
    arr[j] = arr[i]
    if arr[i] == 0 {
      j--
      arr[j] = arr[i]
    }
    i, j = i-1, j-1
  }
}
impl Solution {
  pub fn duplicate_zeros(arr: &mut Vec<i32>) {
    let n = arr.len();
    let mut i = 0;
    let mut j = 0;
    while j < n {
      if arr[i] == 0 {
        j += 1;
      }
      j += 1;
      i += 1;
    }
    while i > 0 {
      if arr[i - 1] == 0 {
        if j <= n {
          arr[j - 1] = arr[i - 1];
        }
        j -= 1;
      }
      arr[j - 1] = arr[i - 1];
      i -= 1;
      j -= 1;
    }
  }
}
void duplicateZeros(int* arr, int arrSize) {
  int i = 0;
  int j = 0;
  while (j < arrSize) {
    if (arr[i] == 0) {
      j++;
    }
    i++;
    j++;
  }
  i--;
  j--;
  while (i >= 0) {
    if (arr[i] == 0) {
      if (j < arrSize) {
        arr[j] = arr[i];
      }
      j--;
    }
    arr[j] = arr[i];
    i--;
    j--;
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文