題目描述:
給你兩個陣列,arr1 和 arr2,arr2 中的元素各不相同
arr2 中的每個元素都出現在 arr1 中
對 arr1 中的元素進行排序,使 arr1 中項的相對順序和 arr2 中的相對順序相同,未在 arr2 中出現過的元素需要按照升序放在 arr1 的末尾, 示例: 輸入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
輸出:[2,2,2,1,4,3,3,9,6,7,19] 提示:
arr1.length, arr2.length <= 1000
0 <= arr1[i], arr2[i] <= 1000
arr2 中的元素 arr2[i] 各不相同
arr2 中的每個元素 arr2[i] 都出現在 arr1 中 來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/relative-sort-array 代碼實作:
1 def relativeSort(arr1, arr2): 2 ''' 3 4 :param arr1: 5 :param arr2: 6 :return: 7 ''' 8 temp = [[] for i in range(1001)] 9 10 arr3 = [] # 存放不在arr2,但在arr1中的剩余元素 11 for i in arr1: 12 temp[i].append(i) 13 if i not in arr2: 14 arr3.append(i) 15 16 result = [] 17 18 for i in arr2: 19 result.extend(temp[i]) 20 21 result.extend(sorted(arr3)) 22 23 return result 24 25 26 print('=========測驗relativasort()=============') 27 arr1 = [2, 3, 1, 3, 2, 4, 6, 7, 9, 2, 19] 28 arr2 = [2, 1, 4, 3, 9, 6] 29 result = relativeSort(arr1, arr2) 30 print("result=", result) 31 32 33 def relativesort1(arr1, arr2): 34 result = [] 35 for num in arr2: 36 while num in arr1: 37 result.append(num) 38 arr1.remove(num) 39 40 # result.extend(sorted(arr1)) 41 result += sorted(arr1) 42 43 return result 44 45 46 print("-------------測驗relativesort1()---------") 47 result = relativesort1(arr1, arr2) 48 print("result=", result)
輸出如下:
=========測驗relativasort()============= result= [2, 2, 2, 1, 4, 3, 3, 9, 6, 7, 19] -------------測驗relativesort1()--------- result= [2, 2, 2, 1, 4, 3, 3, 9, 6, 7, 19]
思考:
上述采用兩種方法實作了題目要求,方法二相對方法一更簡單,代碼質量更高!在方法一中,需要做兩件事,第一需要將重復元素放在陣列的同一位置,并需要找出不存在于arr2中的元素,將其存放到另一個陣列;第二即是根據arr2中元素順序,實作將arr1中元素放入result陣列中,第一步中,找不同元素和歸納相同元素均需要通過遍歷arr1實作,索性遍歷一遍即可,第二步中,由于排序依據是arr2,所以應遍歷arr2,
需要加強理解兩個函式:extend()和append().
方法二代碼簡潔,清晰易懂,有個特別稱贊的地方,就是使用while回圈實作搜索arr1中重復元素,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/47551.html
標籤:其他
上一篇:分享經典的動態規劃問題(一)
下一篇:UCF Local Programming Contest 2014 J. Factorial Products
