【九度】题目1167:数组排序

题目地址:http://ac.jobdu.com/problem.php?pid=1167
题目描述:

输入一个数组的值,求出各个值从小到大排序后的次序。

输入:

输入有多组数据。
每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。

输出:

各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。

样例输入:
4
-3 75 12 -3
样例输出:
1 3 2 1
来源:
2009年北京航空航天大学计算机研究生机试真题
我太喜欢使用map了。key和value一对一的关系。
map这种key-value的一一对应居然成为NoSql的主流。
输入两个数组,一个排序,一个用来做对照。
值不在map中,就insert,否则就index++;
C++ AC
#include <stdio.h>
#include <algorithm>
#include <map>
using namespace std;
const int maxn = 10002;
int i,n;
int array[maxn];
int newArray[maxn];
map<int,int> numMap;
 
int main(){     
    while(scanf("%d",&n) != EOF){
        for(i = 0 ; i < n; i++){
            scanf("%d",&array[i]);
            newArray[i] = array[i] ;
        }
        sort(newArray, newArray+n);
        int index = 1;
        map<int ,int>::iterator it; 
        for (i = 0; i < n; i++) {
            it = numMap.find(newArray[i]);
            if (it == numMap.end()) {
                numMap.insert(make_pair(newArray[i], index));
                index++;
            }
        }
        for (i = 0; i < n-1; i++) {
            printf("%d ",numMap.find(array[i])->second);
        }
        printf("%d\n",numMap.find(array[n-1])->second);
    }
    return 0;
}
/**************************************************************
    Problem: 1167
    User: wangzhenqing
    Language: C++
    Result: Accepted
    Time:20 ms
    Memory:1504 kb
****************************************************************/

Java AC

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
    /*
     * 1167
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int n = scanner.nextInt();
            Map<Integer, Integer> nuMap = new HashMap<Integer, Integer>();
            int array[] = new int[n];
            int newArray[] = new int[n];
            for (int i = 0; i < n; i++) {
                array[i] = scanner.nextInt();
                newArray[i] = array[i];
            }
            Arrays.sort(newArray);
            int index = 1;
            for (int i = 0; i < n; i++) {
                if (!nuMap.containsKey(newArray[i])) {
                    nuMap.put(newArray[i], index);
                    index++;
                }
            }
             
            for (int i = 0; i < n-1; i++) {
                System.out.print(nuMap.get(array[i])+" ");
            }
            System.out.print(nuMap.get(array[n-1]));
            System.out.println();
        }
    }
}
/**************************************************************
    Problem: 1167
    User: wzqwsrf
    Language: Java
    Result: Accepted
    Time:740 ms
    Memory:37612 kb
****************************************************************/

你可能感兴趣的:(【九度】题目1167:数组排序)