50. 随机数排序
题目描述
生成 N 个 1 到 500 的随机数,你需要删除掉其中重复的数字,即相同的数字只保留一个,把其余相同的数字去掉,然后再把这些数从小到大进行输出。
输入描述
第一行先输入随机整数的个数 N 。 接下来一行包含 N 整数,代表生成的随机数。
输出描述
输出为单独一行,为去重排序过的数组,每个数字后都有一个空格。
输入示例
3
2 2 1
输出示例
1 2
提示信息
数据范围:
1 <= N <= 10^9
1 <= 随机数 <= 500
实现代码(Python):
python
import sys
def main():
lines=sys.stdin.read().splitlines()
idx=0
n=int(lines[idx])
idx+=1
nums=list(map(int,lines[idx].split()))
#print(nums)
nums_set=[0]*501
for i in range(n):
nums_set[nums[i]]+=1
#print(nums_set)
res=[]
for i in range(1,501):
if nums_set[i]!=0:
res.append(i)
s=[str(x) for x in res]
print(' '.join(s))
if __name__=="__main__":
main()
分析
哈希表优势:去重操作 O (1) 时间复杂度
本题也可使用:集合(set),其是 Python 中最简洁的哈希表实现,add() 操作时间复杂度 O (1),遍历 N 个数的时间复杂度 O (N);