例如sequence是 1,2,3,4,5,6,7
则对应的r_n是 6,4,2,0,1,3,5
例如sequence是 1,2,3,4,5,6,7,8
则对应r_n是 8,6,4,2,1,3,5,7
public static int[] rvsArr(int[] src) {
int[] dest = new int[src.length];
int midi = src.length / 2;
int maxi = src.length - 1;
int sign = -1;
for (int si = maxi; si >= 0; si--, sign *= -1) {
int di = midi + sign * ((si + 1) / 2);
dest[di] = src[si];
}
return dest;
}
第二个sequence转换没问题,不过你的第一个sequence转换的具体规则是什么没明白,为什么元素都变了。
应该是这样的吧
代码
class Test1{
public static void main(String[] args) {
int[] arr= {1,2,3,4,5,6,7};
int[] arr2= {1,2,3,4,5,6,7,8};
Object[] result1 = getNewArray(arr);
Object[] result2 = getNewArray(arr2);
System.out.println(Arrays.asList(result1).toString());
System.out.println(Arrays.asList(result2).toString());
}
static Object[] getNewArray(int[] arr) {
Arrays.sort(arr);
if (arr.length % 2 != 0)
arr[arr.length - 1] = 0;
return getResultArray(arr);
}
static Object[] getResultArray(int[] arr) {
Set<Integer> odd = new HashSet<>(), even = new HashSet<>();
for (int i = 0; i < arr.length; i++) {
if (arr[i]% 2!=0) {
odd.add(arr[i]);
}else {
even.add(arr[i]);
}
}
SortedSet<Integer> order = new TreeSet<Integer>(Collections.reverseOrder());
order.addAll(even);
Object[] oddArr=odd.toArray(),evenArr=order.toArray(),
result = Arrays.copyOf(evenArr, evenArr.length+oddArr.length);
for (int i = 0; i < oddArr.length; i++) {
result[evenArr.length+i]=oddArr[i];
}
return result;
}
}