Leetcode.283.Move Zeros
2019-12-11 本文已影响0人
Jimmy木
题目
给定一个数组,将数组中的0
移动到数组结尾。
Input:[0,1,0,3,12]
Output: [1,3,12,0,0]
思路1
遇到0就去后面不为0的数字交换,每个非0的数字交换一次。
void moveZeroes(vector<int>& nums) {
for (int i = 0; i < nums.size()-1; i++) {
if (nums[i] != 0) {
continue;
}
for (int j = i+1; j < nums.size(); j++) {
if (nums[j] != 0) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
break;
}
}
}
}
思路2
计数器。计算前面0的数量n,遇到非0就和i-n的数字交换。最后将末尾数字置为0.
void moveZeroes(vector<int>& nums) {
if (nums.size() < 2) return;
int count = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] == 0) {
count++;
} else {
nums[i-count] = nums[i];
}
}
for (int i = (int)nums.size() - count; i < nums.size(); i++) {
nums[i] = 0;
}
}
总结
不断思考,写出最高效简洁的代码。