求一个java算法????


    例如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;
	}
}