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
难度:简单 题目地址:https://leetcode-cn.com/problems/duplicate-zeros/
1、C语言代码:
void duplicateZeros(int* arr, int arrSize){
for(int i = 0;i < arrSize;i++){
if(arr[i] == 0){
for(int j = arrSize - 1;j > i;j--){
arr[j] = arr[j-1];
}
i++;
}
}
}
解释: 顺序循环数组,遇见0时,就从后往前把0之后的数组往后移一位,由于这个0也移动了,所以实现了复写的目标,但是再下一次循环时,要跳过这个复写的0,所以i要自增1。
知识点回顾: 无。
2、Java代码:
class Solution {
public void duplicateZeros(int[] arr) {
for(int k = 0; k < arr.length-1; k++){
if(arr[k] == 0){
for(int j=arr.length-1; j > k ; j--){
arr[j] = arr[j-1];
}
k++;
}
}
}
}
解释: 类似于C语言的求解思路。
知识点回顾: 无。
3、Python代码:
class Solution:
def duplicateZeros(self, arr: List[int]) -> None:
"""
Do not return anything, modify arr in-place instead.
"""
n = len(arr)
i = 0
while i < n:
if arr[i] == 0:
arr.insert(i, 0)
arr.pop()
i += 2
else:
i += 1
解释: 类似于C语言的求解思路。
知识点回顾:
1、insert() 函数用于将指定对象插入列表的指定位置。
语法:list.insert(index, obj)
index:对象 obj 需要插入的索引位置。
obj:要插入列表中的对象。
返回值:该方法没有返回值,但会在列表指定位置插入对象。
2、pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
语法:list.pop([index=-1])
index:可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值。
返回值:该方法返回从列表中移除的元素对象。
4、JavaScript代码:
/**
* @param {number[]} arr
* @return {void} Do not return anything, modify arr in-place instead.
*/
var duplicateZeros = function(arr) {
let len = arr.length;
for (let i = 0; i < len; i++) {
if (arr[i] === 0) {
arr.splice(i, 0, 0);
i++;
}
}
arr.length = len;
};
解释: 类似于C语言的求解思路。
知识点回顾:
1、splice() 方法用于添加或删除数组中的元素。
注意:这种方法会改变原始数组。
语法:array.splice(index,howmany,item1,…,itemX)
index:必需。规定从何处添加/删除元素。该参数是开始插入和(或)删除的数组元素的下标,必须是数字。
howmany:可选。规定应该删除多少元素。必须是数字,但可以是 “0”。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
item1, …, itemX:可选。要添加到数组的新元素。
返回值:如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。