题目链接:
https://leetcode-cn.com/problems/move-zeroes
题目思路:
这题首先想到的是使用双指针,其实就是定义两个变量,一个跑的比另一个快,然后在拿他们进行比较
当然这种想法很简单,也很容易想到
但是还有一种思路:就是找一个中间变量index;令所有的非零值等于index,然后最后直接补全0,就可以了;
题目代码:
class Solution {
public void moveZeroes(int[] nums) {
int n=nums.length,left=0,right=0;
while(right<n)
{
if(nums[right]!=0)
{
swap(nums,left,right);
left++;
}
right++;
}
}
public void swap(int[] nums,int left,int right)//传进的每一个元素,都要确定其类型
{
int temp=nums[left];
nums[left]=nums[right];
nums[right]=temp;
}
}
精简版代码,也不能说是精简版,应该是更容易理解一点
class Solution {
public void moveZeroes(int[] nums) {
if(nums==null||nums.length<=1)
{
return;
}
int index=0;
for(int i=0;i<nums.length;i++)
{
if(nums[i]!=0)
{
nums[index]=nums[i];
index++;
}
}
for(int i=index;i<nums.length;i++)
{
nums[i]=0;
}
}
}
题目原题:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。