这个解法的思路是将数组中的所有0移动到数组的末端,而保持非零元素的相对顺序不变。
起首,定义两个指针 left 和 right,初始时都指向数组的开头。right 指针用于遍历数组,left 指针用于记录下一个非零元素应该存放的位置。
然后,开始遍历数组,当 right 指针指向的元素为0时,right 指针向右移动一位,跳过该次循环。这是因为我们要将所有的0移动到数组的末端,所以需要忽略所有的0。
当 right 指针指向的元素不为0时,将该元素覆盖到 left 指针指向的位置,并将 left 指针向右移动一位,即 left++。如许,非零元素就被移动到了正确的位置上。
循环结束后,left 指针后面的元素都应该是0,所以我们再次遍历数组,将 left 指针后面的元素都设置为0。
终极的结果就是将所有的0移动到了数组的末端,而非零元素的相对顺序保持不变。