移动零
标签(空格分隔): LeetCode
题目链接
题目:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
做这道题的时候,联系到的一点知识:
-
java如何通过一个swap方法实现交换两个数的值呢?
- 经过网上查找,自己思索发现在不创建其他变量的情况下,可以通过反射实现,但仍然存在一定问题。(详细信息单写一篇文章吧)
- <关于Java通过反射实现交换两个数的值的解决与存在的一些问题>
有一种快排的感觉,就是遍历一次,当遇到非0数时将其和左侧标记位置交换,
这样就会将0全部移动到数组的尾部,时间复杂为O(n)
Code
/*
有一种快排的感觉,就是遍历一次,当遇到非0数时将其和左侧标记位置交换,
这样就会将0全部移动到数组的尾部,时间复杂为O(n)
*/
public void MoveZeroes(int[] nums){
//左端标记
int leftbook = 0;
int t = 0;
for (int i = 0; i < nums.length; i++){
if(nums[i] != 0){
t = nums[i];
nums[i] = nums[leftbook];
nums[leftbook] = t;
leftbook++;
}
}
}