其他分享
首页 > 其他分享> > leetcode刷题记录之1089

leetcode刷题记录之1089

作者:互联网

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]

提示:

难度:简单  题目地址: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 中删除了元素,则返回的是含有被删除的元素的数组。

标签:index,arr,int,元素,1089,++,数组,leetcode,刷题
来源: https://blog.csdn.net/qq_41278826/article/details/100567828