GitHub-LT-283-源码 :large_blue_diamond:双指针
问题描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 输入: [0,1,0,3,12] 输出: [1,3,12,0,0]
解法1:
- 执行用时:12 ms, 在所有 C++ 提交中击败了23.55%的用户
- 内存消耗:9 MB, 在所有 C++ 提交中击败了100.00%的用户
算法复杂度
O(n)
class Solution {
public:
void moveZeroes(vector<int>& nums) {
for (int lastNonZeroFoundAt = 0, cur = 0; cur < nums.size(); cur++) {
if (nums[cur] != 0) {
swap(nums[lastNonZeroFoundAt++], nums[cur]);
}
}
}
};
##解法2: 双指针,可以用于链表,数组 [如果是两个字符串是用链表存放的]
- 执行用时:4 ms, 在所有 C++ 提交中击败了99.45%的用户
- 内存消耗:9 MB, 在所有 C++ 提交中击败了100.00%的用户
算法复杂度
O(n)
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int j=0;//统计0的个数
for(int i=0;i<nums.size();i++){
if(nums[i]!=0){
nums[j]=nums[i];
j++;
}
}
for(int i=j;i<nums.size();i++){
nums[i]=0;
}
}
};