Skip to content

Commit a6c68bf

Browse files
committed
Runtime: 0 ms (Top 100.0%) | Memory: 8.80 MB (Top 37.04%)
1 parent d4da65e commit a6c68bf

File tree

1 file changed

+35
-60
lines changed

1 file changed

+35
-60
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,42 @@
1+
// Runtime: 0 ms (Top 100.0%) | Memory: 8.80 MB (Top 37.04%)
2+
13
class Solution {
24
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;
1711
}
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;
5613
}
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+
}
6238
else
63-
return i;
64-
65-
return -1;
39+
ans[3] = solve(count,d/2+1);
40+
return ans;
6641
}
6742
};

0 commit comments

Comments
 (0)