華為筆試題之排序去重
明明想在學(xué)校中請一些同學(xué)一起做一項(xiàng)問卷調(diào)查,為了實(shí)驗(yàn)的客觀性,他先用計(jì)算機(jī)生成了N個(gè)1到1000之間的隨機(jī)整數(shù)(N≤1000),對于其中重復(fù)的數(shù)字,只保留一個(gè),把其余相同的數(shù)去掉,不同的數(shù)對應(yīng)著不同的學(xué)生的學(xué)號(hào)。然后再把這些數(shù)從小到大排序,按照排好的順序去找同學(xué)做調(diào)查。請你協(xié)助明明完成“去重”與“排序”的工作(同一個(gè)測試用例里可能會(huì)有多組數(shù)據(jù),希望大家能正確處理)。
1 def parttion(nums,left,right): 2 # 基準(zhǔn)值 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 #找見基準(zhǔn)值的下標(biāo),也就是循環(huán)遍歷匯合的地方 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
posted on 2020-08-19 11:00 dangdangA 閱讀(317) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)