每天一到算法题-数组

tech2024-03-29  72

每天一到算法题-数组

白话描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zeroes

白话实现:快慢指针 必须考虑第一个为0的情况 官方解还是很简单

class Solution { public void moveZeroes(int[] nums) { if((nums.length==0)||(nums.length==1)) return; int count=0; for(int i=0;i<nums.length;i++){ if(nums[i]==0) count++; } if(count==nums.length) return; if(nums[0]==0){ int i=0; while((nums[i]==0)&&i<nums.length){ i++; } int tmp=nums[i]; nums[0]=tmp; nums[i]=0; } int i=0; for(int k=1;k<nums.length;k++){ if(nums[k]!=0){ i++; nums[i]=nums[k]; } else{ i++; while((nums[k]==0)&&k<nums.length-1){ k++; } nums[i]=nums[k]; } } for(int j=i+1;j<nums.length;j++){ nums[j]=0; } } }

 

最新回复(0)