4 回答

TA貢獻1765條經驗 獲得超5個贊
規(guī)則似乎是奇數(shù)索引 (1, 3, 5, ...) 處的值必須大于相鄰索引處的值,例如,索引 5 處的值必須大于索引 4 和 6 處的值。
實現(xiàn)此目的的最簡單方法是將最小值放在偶數(shù)索引處,將最大值放在奇數(shù)索引處。要將值拆分為最小值和最大值,請先對值進行排序。
例子:
Input: 1,4,7,9,1,3,5,10,11
Sorted: 1,1,3,4,5,7,9,10,11
└───────┘ └───────┘
smallest largest
↓ ↓ ↓ ↓ Odd indexes
Result: 1,7,1,9,3,10,4,11,5
↑ ↑ ↑ ↑ ↑ Even indexes
這樣做可以確保解決方案是正確的,假設解決方案是可能的。例如,如果輸入是1,1,1,1,2,2,2,您仍然會得到有效的解決方案 ( 1,2,1,2,1,2,1),而簡單的相鄰值交換則不會。
我會將編碼作為練習留給您完成。

TA貢獻1836條經驗 獲得超13個贊
我知道您的問題有多個有效輸出,但我有同樣的想法 @shuki avraham 提到了并且 @Andreas 詳細解釋了它。
所以你對它進行排序,然后在數(shù)組中寫入最小的然后是最大的數(shù)字,依此類推。這是你如何做的:
Arrays.sort(arr);
for(int i = 0; i < n / 2; i++) {
System.out.print(arr[i] + " " + arr[n-i-1] + " ");
}
if(n % 2 == 1) System.out.print(arr[i]);

TA貢獻1854條經驗 獲得超8個贊
像這樣的事情可以解決目的:
int[] x = {1, 2, 3, 4, 5, 7, 9, 12, 10, 11, 6, 0};
//sort asc
Arrays.sort(x);
//swap at alternate, take care of odd/even length array
for (int i = 0; i < x.length - 2;) {
int temp = x[i + 1];
x[i + 1] = x[i + 2];
x[i + 2] = temp;
i += 2;
if (i >= x.length) {
i--;
}
}
System.out.println(Arrays.toString(x));
添加回答
舉報