给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
思路
就是把0都取出来 然后其他元素 依次都把添加进去,然后再把0往最后依次添加
package com.binglian.array;
//给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
//
//示例:
//
//输入: [0,1,0,3,12]
//输出: [1,3,12,0,0]
public class Lk_283 {
public void moveZeroes(int[] nums){
int k=0;
for(int i=0;i<nums.length;i++){
if(nums[i] !=0){
nums[k++]=nums[i];
}
}
for(int i=k;i<nums.length;i++){
nums[k++]=0;
}
}
}
进行优化
比如第一个是0就和第二进行交换 一直这样交换下去!
package com.binglian.array;
//给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
//
//示例:
//
//输入: [0,1,0,3,12]
//输出: [1,3,12,0,0]
public class Lk_283 {
public void moveZeroes(int[] nums){
int k=0; //nums中,[0....k]的元素均为非0元素
//遍历第i个元素后,保证[0...i]中所有非0元素
//都按照顺序排序在[0...k]中
//同时,[k...i]为0
for(int i=0;i<nums.length;i++){
if(nums[i]!=0){
if(k!=i){
swap(nums,k++,i);
}else{
k++;
}
}
}
}
public void swap(int[] nums,int i,int j){
int t=nums[i];
nums[i]=nums[j];
nums[j]=t;
}
public static void main(String[] args) {
int[] num= {0, 1, 0, 3, 12};
(new Lk_283()).moveZeroes(num);
for(int i=0;i<num.length;i++){
System.out.println(num[i]+",");
}
}
}