向后移动零 (leetcode 283)

一:解题思路

方法一:Time:O(n),Space:O(n)

方法二:Time:O(n),Space:O(1)

二:完整代码示例 (C、C++、Java、Python)

方法一C:

void moveZeroes(int* nums, int numsSize) {
    if (numsSize == 0) return;
    int* temp = (int*)malloc(sizeof(int)*numsSize);
    int j = 0;
    int count = 0;
    int i = 0;
    
    for (i = 0; i < numsSize; i++) {
        if (nums[i] != 0) {
            temp[j++] = nums[i];
            count++;
        }
    }

    for (i = 0; i < numsSize - count; i++) {
        temp[j++] = 0;
    }

    for (i = 0; i < numsSize; i++) {
        nums[i] = temp[i];
    }
}

方法一C++:

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        if (nums.size() == 0) return;
        int n = nums.size();
        vector<int> temp(n,0);
        int j = 0;

        int count = 0;
        for (int i = 0; i < nums.size(); i++) {
            if (nums[i] != 0) {
                temp[j++] = nums[i];
                count++;
            }
        }

        for (int i = 0; i < n - count; i++) {
            temp[j++] = 0;
        }

        for (int i = 0; i < n; i++) {
            nums[i] = temp[i];
        }
    }
};

方法一Java:

 

 

方法一Python:

from typing import List
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        
        if not nums: return
        n=len(nums)
        temp=[]
        j=0
        count=0
        for i in range(n):
            if nums[i]!=0:
                temp.append(nums[i])
                j=j+1
                count=count+1
        
        for i in range(n-count):
            temp.append(0)
            j=j+1
        
        for i in range(n):
            nums[i]=temp[i]

 

 

方法二C:

void moveZeroes(int* nums, int numsSize) {
    if (numsSize == 0) return;
    int slow = 0;
    int fast = 0;
    for (fast = 0; fast < numsSize; fast++) {
        if (nums[fast] != 0) {
            nums[slow++] = nums[fast];
        }
    }

    while (slow < numsSize) {
        nums[slow++] = 0;
    }
}

 

方法二C++:

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        if (nums.size() == 0) return;

        int slow = 0;
        for (int fast = 0; fast < nums.size(); fast++) {
            if (nums[fast] != 0) {
                nums[slow++] = nums[fast];
            }
        }

        while (slow < nums.size()) {
            nums[slow++] = 0;
        }
    }
};

 

方法二Java:

 

方法二Python:

from typing import List
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        if not nums: return
        
        slow=0
        for fast in range(len(nums)):
            if nums[fast]!=0:
                nums[slow]=nums[fast]
                slow=slow+1
        while slow<len(nums):
            nums[slow]=0
            slow=slow+1

 

posted @ 2020-03-17 16:50  repinkply  阅读(173)  评论(0)    收藏  举报