privatestaticvoidOneOfThree(int[] array){ int sum = 0;//整个数组的总和 int l = 0, r = 0;//初始化 for (int i = 0; i < array.length; i++) { sum += array[i]; } //由于是整数数组,如果总和不是3的倍数,那么肯定不存在 if ( sum%3 != 0 ) { System.out.println("no that l & r index"); return; } int s1 = array[0];//s1表示第一部分的和 for (int i = 0; i < array.length; i++) { if (s1 < sum/3) {//比 (sum/3) 小,则继续累加 s1 += array[i+1]; }elseif (s1 == sum/3) { l = i;//相等了,把值交给l,一定要退出循环 break; }else {//大于了,肯定不存在这样的 l 了 l = -1; break; } } //同理处理,但s2表示的是第三部分的和,从最后一个数,往前累加比较 int s2 = array[array.length - 1]; for (int i = array.length-1; i > 0; i--) { if (s2 < sum/3) { s2 += array[i-1]; }elseif (s2 == sum/3) { r = i-1; break; }else { r = -1; break; } } if ( (l == -1) || (r == -1) ) { System.out.println("no that l & r index"); } if ( l>0 && r>0 && l < r && r < array.length-1 ) { System.out.println("l = " + l); System.out.println("r = " + r); } } publicstaticvoidmain(String[] args){ int[] b = {1,5,6,0,4,2}; OneOfThree(b); }
3.长度为 n 的整数数组,对数组进行整理,使得所有的奇数都在数组的前面,而所有的偶数都在数组的后面。例如数组为 {1,2,3,4,5,6}. 整理后为 {1,3,5,2,4,6}.