No.283 零移动问题
本题来源于力扣
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
提示:
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1
进阶:你能尽量减少完成的操作次数吗?
通过次数957,581提交次数1,497,012
解题思路
双指针法
代码实现:
java实现
class Solution {
public void moveZeroes(int[] nums) {
if (nums == null){return;}
else{
int j = 0;
for(int i = 0;i<nums.length;i++){
if(nums[i]!=0){
nums[j++]=nums[i];
}
}
for(int i = j;i<nums.length;i++){
nums[i]=0;
}
}
}
}
Python实现
class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
count = 0
for i in range(len(nums)):
if nums[i]==0:
count+=1
for i in range(count):
nums.remove(0)
nums.append(0)
print('nums=', nums)
s = Solution ()
s.moveZeroes([1, 0,3,0,2,0,99])#测试
欢迎各位大佬评论交流!