zoukankan      html  css  js  c++  java
  • leetcode1093

    这道题,我看了半天没看懂,等看懂的时候,时间都快结束了。

     1 class Solution:
     2     def sampleStats(self, count: 'List[int]') -> 'List[float]':
     3         l = []
     4         sums = 0
     5         n = 0
     6         maxv = -1
     7         minv = 256
     8         modev = -1
     9         modetime = 0
    10         for i in range(len(count)):
    11             c = count[i]
    12             if c != 0:
    13                 l.append((i,c))
    14                 sums += c * i
    15                 n += c
    16                 maxv = max(maxv,i)
    17                 minv = min(minv,i)
    18                 if modetime < c:
    19                     modetime = c
    20                     modev = i
    21         meanv = sums / n
    22         medianv = 0
    23         half = 0
    24         if n % 2 == 1:
    25             for i in range(len(l)):
    26                 half += l[i][1]
    27                 if half >= n // 2:
    28                     medianv = l[i][0]
    29                     break
    30         else:
    31             for i in range(len(l)):
    32                 half += l[i][1]
    33                 if half == n // 2:
    34                     medianv = (l[i][0] + l[i+1][0]) / 2
    35                     break
    36                 elif half > n // 2:
    37                     medianv = l[i][0]
    38                     break
    39         return [float(minv),float(maxv),float(meanv),float(medianv),float(modev)]

    简单介绍一下思路,本题是要求一个数组的:最小数,最大数,平均数,中位数,众数。

    但是给出的不是原始数组,而是数组的统计。

    例如:[0,1,5,0,2,3],表示的是[1,2,2,2,2,2,4,4,5,5,5]。就是说从0~255,下标i表示数值,对应元素表示这个数值有多少个。

    如果要把整个数组还原,再进行统计,就会TLE。因此要考虑不还原数组,而是遍历统计数组的同时记录一些信息。

    最小值和最大值分别对应第一个出现的非0数的下标,和最后一个出现的非0数的下标。

    平均值,就是用元素的和除以原始数组的个数。众数就是统计数组中的最大值对应的下标。

    比较麻烦的是中位数,这个数字对于偶数个元素是中间的两个元素的平均值,对于奇数个元素是中间的元素的值。

    所以需要根据总元素的个数是奇数还是偶数分类处理。具体的处理逻辑见22~38行。

    最后返回的是float类型,python的数组中可以包含不同类型的数据,因此不会自动将int广播成float,需要手动转换。

    总之这道题,差评吧。

  • 相关阅读:
    如何培养编程所需要的逻辑思维?
    CSS教程
    Android中Service(服务)详解
    Tomcat热部署的实现原理
    Java多线程和线程池(转)
    导出Excel表格
    各种时间格式化的转化
    上传多媒体文件到微信公众平台
    发起https请求并获取结果
    Java 将字节转换为十六进制字符串
  • 原文地址:https://www.cnblogs.com/asenyang/p/11072239.html
Copyright © 2011-2022 走看看