问题:给定一个整数数组,要求把数组中指定的值全部移动到数组末尾,其余值依次向前推进
例如:数组 [0, 2, 1, 0, 3, 0, 4]
要求将数组中的所有0移到末尾,其余值依次向前推进,得到结果:
[2, 1, 3, 4, 0, 0, 0]
上代码
快慢指针的思想:
public static void arrayMove(int[] arr, int num){
//慢指针从0索引开始
int slow = 0;
//快指针从0开始
for (int fast = 0; fast < arr.length; fast++) {
//快指针向后找到为不为num的元素
if (arr[fast] == num ) {
continue;
}
//慢指针向前找到为num的元素,但不能超过快指针
while (arr[slow] != num && slow < fast){
slow++;
}
int temp = arr[slow];
arr[slow] = arr[fast];
arr[fast] = temp;
}
}
测试:
public static void main(String[] args) {
//需要操作的数组
int[] arr = {0, 2, 1, 0, 3, 0, 4};
//键盘录入移动的值
Scanner sc = new Scanner(System.in);
System.out.println("请输入要移动的值:");
int num = sc.nextInt();
System.out.println("原数组为:"+ Arrays.toString(arr));
arrayMove(arr,num);
System.out.println("改变后数组为数组为:"+ Arrays.toString(arr));
}