题解 | #移动 0#
移动 0
http://www.nowcoder.com/practice/102586387caa4afcbad6f96affce9780
在原数组上修改
- 两个指针 first_0 , last_0 分别指向第一个0 和最后一个0 (连续区间)
- 非0值前移 :nums[first_0++] = nums[last_0++] 直到nums[last_0] !=0
- 给此时的 [first_0, last_0) 区间内赋0 ,重复上述操作
- 注意边界问题
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型vector
*/
vector<int> moveZeroes(vector<int>& nums) {
// write code here
int first_0 = 0, last_0 = 0;
while (first_0 < nums.size() && last_0 < nums.size()) {
if (nums[first_0] == 0) {
last_0 = first_0;
while (last_0 < nums.size() && nums[last_0] == 0) {
last_0++;
}
while (last_0 < nums.size() && nums[last_0] != 0) {
nums[first_0++] = nums[last_0++];
}
int temp = first_0;
while (first_0 < last_0) {
nums[first_0] = 0;
first_0++;
}
first_0 = temp;
} else first_0++;
}
return nums;
}
};