华为笔试题之排序去重

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。

 1 def parttion(nums,left,right):
 2     # 基准值
 3     p = nums[left]
 4     low, high = left, right
 5     while low < high:
 6         while (low < high) and (nums[high] >= p):
 7             high -= 1
 8         nums[low], nums[high] = nums[high], nums[low]
 9         while (low < high) and (nums[low] <= p):
10             low += 1
11         nums[low], nums[high] = nums[high], nums[low]
12 
13     return low
14 
15 def quickSort(nums,left,right):
16     #找见基准值的下标,也就是循环遍历汇合的地方
17     if left < right:
18         p = parttion(nums,left,right)
19         quickSort(nums,left,p-1)
20         quickSort(nums,p+1,right)
21     return nums
22 
23 def sortedSet(nums):
24     #首先快速排序
25     #其次去重(双指针)
26     nums = quickSort(nums,0,len(nums) - 1)
27     setNum = [nums[0]]
28     i, j = 0, 1
29     while j <= (len(nums) - 1):
30         if nums[i] != nums[j]:
31             setNum.append(nums[j])
32             i = j
33             j += 1
34         else:
35             j += 1
36 
37     return setNum
原文地址:https://www.cnblogs.com/xiaodangdang/p/13528027.html