算法修炼第一天
1.问题:
给定一个数组如何将数组中的指定的元素移动到数组的最后面,例如给定数组 [0, 1, 0, 3, 12]如何将数组中的0排到最后?
2.思路:
将指定元素移动到最后,第一步想的肯定是要遍历该数组判断数组中的元素有哪些是等于你给定的值的,哪些是不等于给定的值,既然要把目标元素移动最后,那就反过来思考先将不是目标元素的移动,然后再数组的末尾添加给定的目标值,直到到达数组的容量,因为我们是知晓数组的容量的和给定的需要移动的目标值的,只需要往后面添加就可以
3.代码
public class MoveZero {
public static void main(String[] args) {
int [] moveZeroArr= {0, 1, 0, 3, 12};
System.out.println(Arrays.toString(moveZero(moveZeroArr)));
}
private static int [] moveZero(int [] arr){
if(arr==null ||arr.length==0){
return arr;
}
//定义一个变量
int index=0;
for (int num : arr) {
//遍历数组中的元素,如何数组中的元素不是给定的目标值,则将数组中对应的下标的值替换成不为目标值的
if(num!=0){
arr[index++]=num;
}
}
//直接往数组中添加给定的所需要移动的目标值,当数组中的长度大于元数组中的长度时退出
while (index<arr.length){
arr[index++]=0;
}
return arr;
}
}
4.总结
该方式主要用到的就是反向思考,因为一个数组中的元素个数是确定的,移动完不是目标值的数据后,剩下的就是我们想要添加的元素,并且个数是知道的,时间复杂度是O(n)