题目描述:
给你n个整数,请按从大到小的顺序输出其中前m大的数。
输入:
每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
输出:
对每组测试数据按从大到小的顺序输出前m大的数。
样例输入:
5 3 3 -35 92 213 -644
样例输出:
213 92 3
如果按之前的sort排序,然后在输出,复杂度为nlogn,千万级别。利用哈希数组,可以将数值与数组下标联系起来,算法的时间复杂度只需要便利一次这个数组,时间复杂度在百万的级别。#include "stdafx.h" #define OFFSET 500000 int buf[1000000]; int _tmain(){ int n,m; for (int i = -500000; i <=500000; i++) { buf[i+OFFSET]=0; } while (scanf("%d%d",&n,&m)) { for (int i = 0; i < n; i++) { int x; scanf("%d",&x ); buf[x+OFFSET]=1; } for (int i = 500000; i >=-500000; i--) { if(buf[i+OFFSET]==1) { printf("%d",i); m--; if (m==0) { break; } else printf(" "); } } } return 0; }
【九度】题目1431:Sort
最新推荐文章于 2020-09-26 23:38:24 发布