読者です 読者をやめる 読者になる 読者になる

TopCoder SRM 662 Div1 Easy: FoxesOfTheRoundTable

解法

高さでソートして、1番目を末尾、2番目を先頭、3番目を末尾、4番目を先頭、 ... とリストに挿入し、それを返せば良い。

コード

import java.util.ArrayList;
import java.util.Arrays;

public class FoxesOfTheRoundTable {

	public int[] minimalDifference(int[] heights) {
		int N = heights.length;
		Fox[] foxs = new Fox[N];
		for (int i = 0; i < N; i++) {
			foxs[i] = new Fox(i, heights[i]);
		}
		Arrays.sort(foxs);
		ArrayList<Integer> list = new ArrayList<>();
		for (int i = 0; i < N; i++) {
			if (i % 2 == 0) {
				list.add(foxs[i].id);
			} else {
				list.add(0, foxs[i].id);
			}
		}

		int[] ret = new int[N];
		for (int i = 0; i < N; i++) {
			ret[i] = list.get(i);
		}
		return ret;
	}

}

class Fox implements Comparable<Fox> {
	int id, height;

	public Fox(int i, int h) {
		this.id = i;
		this.height = h;
	}

	@Override
	public int compareTo(Fox o) {
		return this.height - o.height;
	}

}