-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstatisticsfromaLargeSample.py
More file actions
33 lines (31 loc) · 1 KB
/
statisticsfromaLargeSample.py
File metadata and controls
33 lines (31 loc) · 1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# Source: https://leetcode.com/problems/statistics-from-a-large-sample/
# Author: Miao Zhang
# Date: 2021-04-08
class Solution:
def sampleStats(self, count: List[int]) -> List[float]:
import bisect
minval = 255
maxval = 0
mode = -1
modecnt = 0
sums = 0
m = collections.defaultdict(int)
cnt = 0
for i in range(256):
if not count[i]: continue
minval = min(minval, i)
maxval = max(maxval, i)
sums += i * count[i]
if count[i] > modecnt:
mode = i
modecnt = count[i]
cnt += count[i]
m[cnt] = i
keys = sorted(m)
idx = bisect.bisect_left(keys, (cnt + 1) // 2)
median = m[keys[idx]]
if cnt % 2 == 0 and idx + 1 != len(keys) and keys[idx] == cnt // 2:
median = (median + m[keys[idx + 1]]) / 2
return [minval, maxval, sums / cnt, median, mode]