华为笔试题之排序去重
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了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