1.题目链接:
1.代码:
class Solution:
def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
arr.sort()
return arr[:k]
通过图:
过于简短,没啥想法。。。
2.题目链接:
2.代码:
class Solution:
def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]:
#初始思路
#看到arr2 元素各不相同,arr1 元素允许相同,默认想到哈希表;
#思路:以arr2为哈希表基础,默认值为0,遍历arr1,存在+1,不存在添加
#问题:最后不会输出。。
#新思路 计数排序
#单独顶一个MAX 1001的 纯0数组,用于统计数字出现频率
#三次遍历:
#用于实现类似哈希表一样的效果
Num = [0 for _ in range(1001)] #生成用于计数的MAX 1001的纯0数组,0为幅值,_ 代表并不关心中间变量的赋值
Ret = [] #用于返回的空数组
#1.第一次遍历。因为 1000>=arr1中元素>=0,所以用索引数来代表arr1中元素的值,索引数对应的值代表出现次数
for i in arr1:
Num[i]+=1
#2.第二次遍历。用arr2的元素顺序,Num统计的个数,为Ret数组赋值。
for i in arr2:
#List += [a]*[N],会将List后边添加,N个a元素
Ret += [i]*Num[i]
Num[i] = 0
#3.第三次遍历。将未在arr2中的元素,以统计得到的次数为准,按顺序为Ret赋剩余值。
for i in range(len(Num)):
Ret += [i]*Num[i] #遇到次数为0(已添加),则跳过;
return Ret
一把血泪跟总结,都在注释里。