zoukankan      html  css  js  c++  java
  • 每日一题20201114(1122. 数组的相对排序)

    image.png

    重点

    首先注意几个重点:
    
    1. arr1和arr2里最大的元素不会超过1000
    2. arr2里面没有重复的元素
    3. arr2里面每个元素必定在arr1里面出现
    

    思路

    1. 先创建一个大小为1001的数组data用来存放arr1中每个元素出现的次数(因为最大值可能是1000),其实这里可以简化,只要这个数组的长度等于max(arr1)+1即可覆盖到所有arr1中的数字;
    2. 创建一个大小为arr1的数组或者直接沿用arr1(因为arr1的信息已经被记录到data数组里面了)
    3. 遍历arr2,去data中取出arr1中包含arr2元素的数量,分别插入这个新数组并把data里面arr2的相关数据都置为0,保证后续data中只有arr1中特有的元素。
    4. 遍历data,把剩下的数据写到新数组。
    

    方法一:

    class Solution:
        def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]:
            # 创建一个能容纳arr1最大值的数组
            data = [0] * (max(arr1)+1)
            # 存储arr1中的元素值和数量
            for a in arr1:
                data[a] += 1
            # 最终结果数组
            result = []
            # 把arr2的所有元素写入result数组
            for d in arr2:
                length = data[d]
                for x in range(length):
                    result.append(d)
                data[d] = 0
            # i是data中剩余arr1数据的值,可能会有多个,所以需要插入n个i,当n等于0的时候代表n不存在或者n是arr2里的元素,直接continue
            for i, n in enumerate(data):
                if n == 0:
                    continue
                for x in range(n):
                    result.append(i)
            return result
    

    优化(少用一个result数组,直接在arr1修改)

    class Solution:
        def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]:
            data = [0] * (max(arr1)+1)
            for a in arr1:
                data[a] += 1
            # 定义一个指针指向当前已经替换的元素
            i = 0
            for d in arr2:
                length = data[d]
                for x in range(i, i+length):
                    arr1[x] = d
                i += length
                data[d] = 0
            for j, n in enumerate(data):
                if n == 0:
                    continue
                for x in range(i, i+n):
                    arr1[x] = j
                i += n
            return arr1
    

    image.png

  • 相关阅读:
    一般处理程序中,禁止缓存的办法!
    在ashx处理程序中,如果返回json串数据?
    开通博客园了。
    consul
    gitlab
    swoft
    consul(转https://blog.csdn.net/junaozun/article/details/90699384)
    mac tar 解压
    redis应用场景
    redis 集群
  • 原文地址:https://www.cnblogs.com/we8fans/p/14012931.html
Copyright © 2011-2022 走看看