求思路!
题目描述:
输入一个数组的值,求出各个值从小到大排序后的次序。并且要求相同的数据其序号是相同的
输入:
输入有多组数据。
每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。
输出:
各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。
样例输入
4
-3 75 12 -3
样例输出
1 3 2 1
求思路~或者给代码看看
[解决办法]
大概思路是:
1、把数据放到TreeSet中去重复以及排序;
2、再根据原来顺序,逐个获取TreeSet中的位置,即可
(如果不只是输出的话,还可以把排序和数值存放在map中)
int num = 4; // 数组长度,不过个人感觉这个值没什么用处
String data = "-3 75 12 -3"; // 数组数据
String[] arrTemp = data.split(" ");
// 根据输入的num来获取数据,如果没有num的话,就不需要这段逻辑了。
num = arrTemp.length > num ? num : arrTemp.length;
int[] srcData = new int[num];
System.out.println("参与排序的数据:");
for (int i = 0; i < num; i++) {
srcData[i] = Integer.valueOf(arrTemp[i]);
System.out.print(srcData[i] + " ");
}
// 通过TreeSet来排序,以及过滤重复项
Set<Integer> set = new TreeSet<Integer>();
for (int i = 0; i < num; i++) {
set.add(srcData[i]);
}
System.out.println("\n\n过滤重复后的排序:" + set);
// 通过排序后的TreeSet,来导出原来的次序
Integer[] intData = new Integer[set.size()];
List<Integer> intList = Arrays.asList(set.toArray(intData));
System.out.println("\n排序后的次序如下:");
for (int element : srcData) {
System.out.print(intList.indexOf(element) + 1 + " ");
}