|
| 1 | +// Runtime: 0 ms (Top 100.0%) | Memory: 8.80 MB (Top 37.04%) |
| 2 | + |
1 | 3 | class Solution {
|
2 | 4 | public:
|
3 |
| - vector<double> sampleStats(vector<int>& count) { |
4 |
| - vector<double> results; |
5 |
| - |
6 |
| - results.push_back(findMin(count)); |
7 |
| - results.push_back(findMax(count)); |
8 |
| - |
9 |
| - const int sum = std::accumulate(std::begin(count), std::end(count), 0); |
10 |
| - results.push_back(findMean(count, sum)); |
11 |
| - |
12 |
| - if (sum % 2 == 0) |
13 |
| - { |
14 |
| - const auto left = findMedian(count, sum/2); |
15 |
| - const auto right = findMedian(count, sum/2 + 1); |
16 |
| - results.push_back ((left + right) / 2.0); |
| 5 | + double solve(vector<int>& arr,int n){ |
| 6 | + double count = 0; |
| 7 | + for(int i = 0;i < arr.size();i++){ |
| 8 | + count += arr[i]; |
| 9 | + if(count >= n) |
| 10 | + return i; |
17 | 11 | }
|
18 |
| - else |
19 |
| - results.push_back(findMedian(count, sum/2 + 1)); |
20 |
| - |
21 |
| - results.push_back(findMode(count)); |
22 |
| - |
23 |
| - return results; |
24 |
| - } |
25 |
| - |
26 |
| -private: |
27 |
| - int findMin(const vector<int> &count) { |
28 |
| - const auto minPtr = std::find_if(std::begin(count), std::end(count), |
29 |
| - [](const int& c) { return c > 0; }); |
30 |
| - |
31 |
| - return minPtr - std::begin(count); |
32 |
| - } |
33 |
| - |
34 |
| - int findMax(const vector<int> &count) { |
35 |
| - const auto maxPtr = std::find_if(std::rbegin(count), std::rend(count), |
36 |
| - [](const int& c) { return c > 0; }); |
37 |
| - |
38 |
| - return (std::rend(count) - 1) - maxPtr; |
39 |
| - } |
40 |
| - |
41 |
| - int findMode(const vector<int> &count) { |
42 |
| - |
43 |
| - const auto maxCountPtr = std::max_element(begin(count), end(count)); |
44 |
| - |
45 |
| - return maxCountPtr - std::begin(count); |
46 |
| - } |
47 |
| - |
48 |
| - double findMean(const vector<int> &count, const int &sum) { |
49 |
| - auto ratio = 1.0 / sum; |
50 |
| - auto mean = 0.0; |
51 |
| - |
52 |
| - for (int i = 0; i < count.size(); ++i) |
53 |
| - mean += count[i] * ratio * i; |
54 |
| - |
55 |
| - return mean; |
| 12 | + return -1; |
56 | 13 | }
|
57 |
| - |
58 |
| - int findMedian(const vector<int> &count, int medianCount) { |
59 |
| - for (int i = 0; i < count.size(); ++i) |
60 |
| - if (count[i] < medianCount) |
61 |
| - medianCount -= count[i]; |
| 14 | + vector<double> sampleStats(vector<int>& count) { |
| 15 | + int mini = INT_MAX; |
| 16 | + int maxi = 0; |
| 17 | + double sum = 0.0; |
| 18 | + int d = 0; |
| 19 | + int mode = 0; |
| 20 | + for(int i = 0;i < count.size();i++){ |
| 21 | + if(count[i] == 0) |
| 22 | + continue; |
| 23 | + mini = min(mini,i); |
| 24 | + maxi = max(maxi,i); |
| 25 | + sum += double(count[i])*i; |
| 26 | + d += count[i]; |
| 27 | + if(count[mode] < count[i]) |
| 28 | + mode = i; |
| 29 | + } |
| 30 | + vector<double>ans(5,0.0); |
| 31 | + ans[0] = mini; |
| 32 | + ans[1] = maxi; |
| 33 | + ans[2] = sum/d; |
| 34 | + ans[4] = mode; |
| 35 | + if(d%2 == 0){ |
| 36 | + ans[3] = (solve(count,d/2) + solve(count,d/2+1))/2; |
| 37 | + } |
62 | 38 | else
|
63 |
| - return i; |
64 |
| - |
65 |
| - return -1; |
| 39 | + ans[3] = solve(count,d/2+1); |
| 40 | + return ans; |
66 | 41 | }
|
67 | 42 | };
|
0 commit comments