1122. 数组的相对排序
首先 排序一下然后扫一边arr1 统计一下 每个元素的个数,接着对于arr2中的每个元素,都添加之前在arr1统计个元素到arr1中,不在arr2的部分就直接补在arr1之后就行。
class Solution:
def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]:
arr1 = sorted(arr1)
hashmap = defaultdict(int)
N = len(arr1)
for num in arr1 :
hashmap[num] +=1
for num in arr2:
for i in range(hashmap[num]):
arr1.append(num)
hashmap[num] = 0
for i in range(N):
if hashmap[arr1[0]] != 0:
arr1.append(arr1[0])
del arr1[0]
return arr1
大佬的一行代码 干!
sort(key=arr2.index) 就是按arr2元素对应的下标顺序进行排序, 类似还比如有sort(key=arr2.len) 按arr2元素的长度进行排序。
return sorted(arr1, key=(arr2+sorted(set(arr1)-set(arr2))).index)
384. 打乱数组
害 直接随机生成一个无重复数字的数组就完事
class Solution:
def __init__(self, nums: List[int]):
self.before = nums
self.len = len(self.before)
def reset(self) -> List[int]:
return self.before
def shuffle(self) -> List[int]:
self.after = []
num = random.sample(range(0, self.len), self.len)
for i in range(self.len):
self.after.append(self.before[num[i]])
return self.after