【力扣】283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/move-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public void moveZeroes(int[] nums) { //设置两个指针、一个指针只指向0,一个指针只指向1 for(int i = 0; i < nums.length ; i++){ if(nums[i] == 0){ for(int j = i+1; j < nums.length ;j++){ if(nums[j] != 0){ swap(nums,i,j); break; } } } } } private void swap(int[] nums ,int a,int b){ int temp = nums[a]; nums[a] = nums[b]; nums[b] = temp; }
参考题解:
public void moveZeroes(int[] nums) { //设置两个指针、一个指针只指向0,一个指针只指向1 int zeroIndex = 0; int oneIndex = 0; while(oneIndex < nums.length){ if(nums[oneIndex] != 0){ swap(nums,oneIndex,zeroIndex); zeroIndex++; } oneIndex++; } } private void swap(int[] nums ,int a,int b){ int temp = nums[a]; nums[a] = nums[b]; nums[b] = temp; }
时间复杂度:O(n) -- 题解有可能本来就是末尾为0了,但是还要再交换一遍
空间复杂度:O(1)
一个入行不久的Java开发,越学习越感觉知识太多,自身了解太少,只能不断追寻