java – 如何将所有偶数移动到数组的前面?
发布时间:2020-12-15 04:19:06 所属栏目:Java 来源:网络整理
导读:以下是问题 – 给定一个整数数组作为输入,返回一个包含与输入数组中相同数字的数组,但重新排列,以便所有偶数都在前面,而赔率数在后面.注意,应该保持偶数和奇数的顺序,即如果在输入中出现偶数n2之前的偶数n1,那么在输出数组n1中应该出现在n2之前.奇数也是如此
以下是问题 –
给定一个整数数组作为输入,返回一个包含与输入数组中相同数字的数组,但重新排列,以便所有偶数都在前面,而赔率数在后面.注意,应该保持偶数和奇数的顺序,即如果在输入中出现偶数n2之前的偶数n1,那么在输出数组n1中应该出现在n2之前.奇数也是如此.另请注意,在此问题中,您不应创建任何新数组. 到目前为止所做的工作如下,但我无法获得预期的输出. public class MoveEvenToFront { static int[] testcase1 = {3,5,4,6,8,9,7,10}; public static void main(String[] args) { MoveEvenToFront testInstance = new MoveEvenToFront(); int[] result = testInstance.moveEvenToFront(testcase1); System.out.print("{"); for (int i = 0; i < result.length; i++) { if (i > 0) { System.out.print(","); } System.out.print(result[i]); } System.out.print("}"); } public int[] moveEvenToFront(int[] arr) { int temp = 0; for (int i = 1; i < arr.length; i++) { if (arr[i - 1] % 2 != 0) { temp = arr[i - 1]; arr[i - 1] = arr[i]; arr[i] = temp; } } return arr; } } 测试用例{1,2,3,10,12}的预期输出是{2,12,1,7}. 解决方法
你的算法错了.您正在检查arr [i-1]是否不均匀并使用arr [i]进行交换.如果arr [i]也是奇数,那么你没有检查它,即使它是奇数也会移动到前面.
你能做的是 >找到数组中的第一个偶数,并将其与第一个索引交换并递增索引. 更改方法如下所示: public int[] moveEvenToFront(int[] arr){ int temp=0; int a=0; for(int i=0;i<arr.length;i++){ if(arr[i]%2==0){ for (int j=i;j>a;j--){ temp=arr[j-1]; arr[j-1]=arr[j]; arr[j]=temp; } a++; } } return arr; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |