Given an array For example, given Note:
Credits:
这道题让我们将一个给定数组中所有的0都移到后面,把非零数前移,要求不能改变非零数的相对应的位置关系,而且不能拷贝额外的数组,那么只能用替换法in-place来做,需要用两个指针,一个不停的向后扫,找到非零位置,然后和前面那个指针交换位置即可,参见下面的代码:
解法一: class Solution { public: void moveZeroes(vector<int>& nums) { for (int i = 0, j = 0; i < nums.size(); ++i) { if (nums[i]) { swap(nums[i], nums[j++]); } } } };
解法二: class Solution { public: void moveZeroes(vector<int>& nums) { int left = 0, right = 0; while (right < nums.size()) { if (nums[right]) { swap(nums[left++], nums[right]); } ++right; } } };
参考资料: https:///discuss/59064/c-accepted-code https:///discuss/70169/1ms-java-solution
分类: LeetCode 自己做的方法: 我的思路是这样的: 第一步:如果第一个位置是0,那么交换位置,一直交换到数组的最后一个位置。 第二部:如果第二个位置是0,那么交换位置,一直交换到数组的最后一个位置。 这样的话,稍微改下冒泡法 就可以了。 这个思路,有点凑巧的意思。数组的最后位置肯定是0 ,交换不交换都一样。 public class Solution { public void MoveZeroes(int[] nums) { for(int i=0;i<nums.Length;i++) { for(int j=i+1;j<nums.Length;j++) { if(nums[i]==0) { int temp=nums[i]; nums[i]=nums[j]; nums[j]=temp; } } } } } |
|
来自: 雪柳花明 > 《LeetCode》