题目大意:
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
a=len(nums)
while 0 in nums:
nums.remove(0)
for i in range(len(nums),a):
nums.append(0)
以下是Java版本:
题意:
将数组nums中零元素全部移到数组尾部,而且非零元素的相对位置保存不变。
例如:操作前nums = [0, 1, 0, 3, 12],操作后nums=[1, 3, 12, 0, 0]
要求:
原地操作数组nums,不能借助新数组来操作;最小化总的操作步骤。
分析:
简单点来说,就是先将数组nums中非零元素按相对位置取出,再依次从下标0开始重新赋值在nums中;最后再在数组nums的空余位置(显然空余位置应该均为零元素)补0即可。
1. public class Solution {
2. //先将nums中所有非零元素按相对顺序取出依次从零下标开始重新赋值
3. //最后再在数组的空余位置补上零元素
4. public void moveZeroes(int[] nums) {
5. //保存nums数组长度
6. int len=nums.length;
7. //用于记录重新赋值后数组nums中下标位置
8. int j=0;
9. for(int i=0;i<len;i++){
10. //遍历将非零元素依次从下标0开始填入nums中
11. if(nums[i]!=0)
12. {
13. nums[j] =nums[i];
14. j++;
15. }
16. }
17. //循环将填入非零元素后的数组nums填入零元素
18. for(;j<len;j++){
19. nums[j]=0;
20. }
21. }
22. }