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 中删除了元素,則傳回的是含有被删除的元素的數組。