[Leetcode] 每日两题 1122 384 -day18

这篇博客介绍了LeetCode的两道题目:1122. 数组的相对排序可以通过排序和统计元素个数来解决;384. 打乱数组则可以简单地通过生成随机无重复数组实现。文中提供了简洁的解题思路。
摘要由CSDN通过智能技术生成
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值