题解 | #移动 0#

移动 0

http://www.nowcoder.com/practice/102586387caa4afcbad6f96affce9780

在原数组上修改

  1. 两个指针 first_0 , last_0 分别指向第一个0 和最后一个0 (连续区间)
  2. 非0值前移 :nums[first_0++] = nums[last_0++] 直到nums[last_0] !=0
  3. 给此时的 [first_0, last_0) 区间内赋0 ,重复上述操作
  4. 注意边界问题
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;
    }
};
全部评论

相关推荐

头像
10-09 19:35
门头沟学院 Java
洛必不可达:java的竞争激烈程度是其他任何岗位的10到20倍
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务