Giả sử chúng ta có một mảng số nguyên có độ dài cố định, chúng ta phải nhân đôi mỗi lần xuất hiện của số 0, dịch chuyển các phần tử còn lại sang phía bên phải.
Lưu ý rằng các phần tử vượt quá độ dài của mảng ban đầu sẽ không được viết.
Vì vậy, giả sử mảng giống như [1,0,2,3,0,4,5,0], thì sau khi sửa đổi nó sẽ là [1,0,0,2,3,0,0,4]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- sao chép arr vào một mảng arr2 khác, đặt i và j là 0
- while i
- nếu arr2 [i] bằng 0, thì
- arr [i]:=0
- tăng tôi lên 1
- if i
- else arr [i]:=arr2 [j]
- tăng i và j lên 1
- nếu arr2 [i] bằng 0, thì
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
class Solution(object): def duplicateZeros(self, arr): arr2 = [i for i in arr] i=0 j = 0 while i < len(arr): if not arr2[j]: arr[i] = 0 i+=1 if i<len(arr): arr[i] = 0 else: arr[i] = arr2[j] j+=1 i+=1 return arr ob1 = Solution() print(ob1.duplicateZeros([1,0,2,3,0,4,5,0]))
Đầu vào
[1,0,2,3,0,4,5,0]
Đầu ra
[1,0,0,2,3,0,0,4]