zoukankan      html  css  js  c++  java
  • 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......)。

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

  • 相关阅读:
    Redis概述与安装
    CentOS-Linux系统下安装MySQL
    CentOS-Linux系统下安装Tomcat
    CentOS-Linux系统下安装JDK
    占位符
    设计模式之装饰者模式
    Servlet3.0
    注解入门
    PHP如何实现99乘法表?
    2017年PHP程序员未来路在何方?(转载)
  • 原文地址:https://www.cnblogs.com/asenyang/p/10926019.html
Copyright © 2011-2022 走看看