• leetcode1054


     1 from collections import Counter
     2 
     3 class Solution:
     4     def rearrangeBarcodes(self, barcodes: 'List[int]') -> 'List[int]':
     5         n = len(barcodes)
     6         c = Counter(barcodes)
     7         sc = sorted(c.items(),key = lambda x:-x[1])
     8 
     9         kk = []
    10         for te in sc:
    11             k = te[0]
    12             v = te[1]
    13             kk.extend([k] * v)
    14 
    15         ind = 0
    16         result = [0] * n
    17         #先插入偶数位
    18         even = 0
    19         for i in range(n//2):
    20             result[even] = kk[ind]
    21             ind += 1
    22             even += 2
    23 
    24         #处理末尾数字
    25         if n%2==1:
    26             result[even] = kk[ind]
    27             ind += 1
    28 
    29         #插入奇数位
    30         odd = 1
    31         for i in range(n//2):
    32             result[odd] = kk[ind]
    33             ind += 1
    34             odd += 2
    35 
    36         return result

    思路,将数组中的元素按照出现次数,从大到小排序,将其展开成按照次数排列的数组。

    例如[7,7,7,8,5,7,5,5,5,8],展开成[7,7,7,7,5,5,5,5,8,8]或者[5,5,5,5,7,7,7,7,8,8]。

    然后遍历这个展开数组,将其中的元素先插入偶数位(0,2,4,6......),再插入奇数位(1,3,5,7......)。

    最终得到的结果就是任意相邻元素都不相同的数组。

  • 相关阅读:
    管理经济学
    第五章 文件管理
    内存管理
    第三章 进程调度与死锁
    操作系统概论 第二章
    计算机系统
    企业与政府信息资源管理
    信息资源管理的标准与法规
    议论文
    如何从大量的 url 中找出相同的 url
  • 原文地址:https://www.cnblogs.com/asenyang/p/10926019.html
Copyright © 2020-2023  润新知