1. 程式人生 > 實用技巧 >華為筆試題之排序去重

華為筆試題之排序去重

明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了N個1到1000之間的隨機整數(N≤1000),對於其中重複的數字,只保留一個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成“去重”與“排序”的工作(同一個測試用例裡可能會有多組資料,希望大家能正確處理)。

 1 def parttion(nums,left,right):
 2     # 基準值
 3     p = nums[0]
 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