LeetCode 281. Move Zeros

LeetCode in Java (8 Part Series)

1 LeetCode 20. Valid Parentheses
2 LeetCode 7. Reverse Integer
4 more parts…
3 LeetCode 281. Move Zeros
4 LeetCode 238. Product of Array Except Self
5 LeetCode 31. Next Permutation
6 LeetCode 98. Validate Binary Search Tree
7 LeetCode 111. Minimum Depth of Binary Tree
8 LeetCode in Java: 209

<span>public</span> <span>void</span> <span>moveZeroes</span><span>(</span><span>int</span><span>[]</span> <span>nums</span><span>)</span> <span>{</span>
<span>int</span> <span>count</span> <span>=</span> <span>0</span><span>;</span>
<span>for</span> <span>(</span><span>int</span> <span>i</span> <span>=</span> <span>0</span><span>;</span> <span>i</span> <span><</span> <span>nums</span><span>.</span><span>length</span><span>;</span> <span>i</span><span>++)</span> <span>{</span>
<span>if</span> <span>(</span><span>nums</span><span>[</span><span>i</span><span>]</span> <span>==</span> <span>0</span><span>)</span> <span>{</span>
<span>count</span><span>++;</span>
<span>continue</span><span>;</span>
<span>}</span>
<span>if</span> <span>(</span><span>count</span> <span>></span> <span>0</span><span>)</span> <span>{</span>
<span>swap</span><span>(</span><span>nums</span><span>,</span> <span>i</span><span>,</span> <span>i</span> <span>-</span> <span>count</span><span>);</span>
<span>}</span>
<span>}</span>
<span>}</span>
<span>private</span> <span>void</span> <span>swap</span><span>(</span><span>int</span><span>[]</span> <span>nums</span><span>,</span> <span>int</span> <span>i</span><span>,</span> <span>int</span> <span>j</span><span>)</span> <span>{</span>
<span>int</span> <span>temp</span> <span>=</span> <span>nums</span><span>[</span><span>i</span><span>];</span>
<span>nums</span><span>[</span><span>i</span><span>]</span> <span>=</span> <span>nums</span><span>[</span><span>j</span><span>];</span>
<span>nums</span><span>[</span><span>j</span><span>]</span> <span>=</span> <span>temp</span><span>;</span>
<span>}</span>
<span>public</span> <span>void</span> <span>moveZeroes</span><span>(</span><span>int</span><span>[]</span> <span>nums</span><span>)</span> <span>{</span>
    <span>int</span> <span>count</span> <span>=</span> <span>0</span><span>;</span>

    <span>for</span> <span>(</span><span>int</span> <span>i</span> <span>=</span> <span>0</span><span>;</span> <span>i</span> <span><</span> <span>nums</span><span>.</span><span>length</span><span>;</span> <span>i</span><span>++)</span> <span>{</span>
        <span>if</span> <span>(</span><span>nums</span><span>[</span><span>i</span><span>]</span> <span>==</span> <span>0</span><span>)</span> <span>{</span>
            <span>count</span><span>++;</span>
            <span>continue</span><span>;</span>
        <span>}</span>
        <span>if</span> <span>(</span><span>count</span> <span>></span> <span>0</span><span>)</span> <span>{</span>
            <span>swap</span><span>(</span><span>nums</span><span>,</span> <span>i</span><span>,</span> <span>i</span> <span>-</span> <span>count</span><span>);</span>
        <span>}</span>
    <span>}</span>
<span>}</span>

<span>private</span> <span>void</span> <span>swap</span><span>(</span><span>int</span><span>[]</span> <span>nums</span><span>,</span> <span>int</span> <span>i</span><span>,</span> <span>int</span> <span>j</span><span>)</span> <span>{</span>
    <span>int</span> <span>temp</span> <span>=</span> <span>nums</span><span>[</span><span>i</span><span>];</span>
    <span>nums</span><span>[</span><span>i</span><span>]</span> <span>=</span> <span>nums</span><span>[</span><span>j</span><span>];</span>
    <span>nums</span><span>[</span><span>j</span><span>]</span> <span>=</span> <span>temp</span><span>;</span>
<span>}</span>
public void moveZeroes(int[] nums) { int count = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] == 0) { count++; continue; } if (count > 0) { swap(nums, i, i - count); } } } private void swap(int[] nums, int i, int j) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; }

The essence of this approach is to swap a non-zero element with the left-most zero.

We iterate through the array nums and increment count by one when we encounter a zero, i.e. we calculate the distance between the left-most zero and a non-zero element. Once we meet a non-zero element, we swap it with the zero at i - count. At the end of the iteration, the zeros have been moved to the end and the relative positions of non-zero elements remain unchanged.

LeetCode in Java (8 Part Series)

1 LeetCode 20. Valid Parentheses
2 LeetCode 7. Reverse Integer
4 more parts…
3 LeetCode 281. Move Zeros
4 LeetCode 238. Product of Array Except Self
5 LeetCode 31. Next Permutation
6 LeetCode 98. Validate Binary Search Tree
7 LeetCode 111. Minimum Depth of Binary Tree
8 LeetCode in Java: 209

原文链接:LeetCode 281. Move Zeros

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
Many people start a career with a dream, then get busy forgetting it.
很多人一开始为了梦想而忙,后来忙得忘了梦想
评论 抢沙发

请登录后发表评论

    暂无评论内容