美文网首页
283. Move Zeroes - easy

283. Move Zeroes - easy

作者: 沉睡至夏 | 来源:发表于2016-10-20 06:15 被阅读4次

    自己的解法,用了两个pointer。速度比较慢。
    答案很简单,用了一个pointer记录非零数insert的position, 并且用iteration做循环。

    My code, 1st:

    public class Solution {
        public void moveZeroes(int[] nums) {
            /** two pointers:
             * 1st first zero, 2nd curr scan iterm
             */
            int zero = -1, curr = 0;
            for (int i=0; i<nums.length; i++) {
                if (nums[i] != 0) continue;
                else {
                    zero = i;
                    break;
                }
            }
            if(zero == -1)  return;
            
            for (int i=zero+1; i<nums.length; i++) {
                if (nums[i]==0) continue;
                else {
                    swap(nums, zero, i);
                    zero ++;
                }
            }
        }
        
        private void swap(int[] nums, int a, int b) {
            int tmp = nums[a];
            nums[a] = nums[b];
            nums[b] = tmp;
        }
    }
    

    看了答案之后:
    这种做法问题是改变了array本身。

    public class Solution {
        public void moveZeroes(int[] nums) {
            if (nums == null || nums.length == 0)   return;
            
            int curr = 0;
            for (int num : nums)
                if (num != 0)   nums[curr++] = num;
            
            while (curr < nums.length)
                nums[curr++] = 0;
        }
    }
    

    想法:在scan的时候没有遇见0,就只向后移动。
    does not matter, just 1ms.
    时间: O(n);
    空间:O(n);


    Never stop. Oct 19 2016

    相关文章

      网友评论

          本文标题:283. Move Zeroes - easy

          本文链接:https://www.haomeiwen.com/subject/pfkfuttx.html