zoukankan      html  css  js  c++  java
  • leetcode1122之数组的相对排序

    题目描述:

    给你两个数组,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中重复元素。

  • 相关阅读:
    函数二
    python控制台输出带颜色的文字方法
    is 和 == 的区别
    基本数据类型(dict)
    基本数据类型(list,tuple)
    基本数据类型(int,bool,str)
    Python运算符与编码
    Java并发编程:synchronized
    泛型中? super T和? extends T的区别
    java中的匿名内部类总结
  • 原文地址:https://www.cnblogs.com/rounie/p/13040341.html
Copyright © 2011-2022 走看看