向后移动零 (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

浙公网安备 33010602011771号