Skip to content

Commit f00d958

Browse files
authored
Create minimum-operations-to-make-median-of-array-equal-to-k.cpp
1 parent e5ce05f commit f00d958

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Time: O(n)
2+
// Space: O(1)
3+
4+
// quick select, greedy
5+
class Solution {
6+
public:
7+
long long minOperationsToMakeMedianK(vector<int>& nums, int k) {
8+
nth_element(begin(nums), begin(nums) + size(nums) / 2, end(nums));
9+
int64_t result = 0;
10+
for (int i = 0; i <= size(nums) / 2; ++i) {
11+
result += max(nums[i] - k, 0);
12+
}
13+
for (int i = size(nums) / 2; i < size(nums); ++i) {
14+
result += max(k - nums[i], 0);
15+
}
16+
return result;
17+
}
18+
};
19+
20+
// Time: O(nlogn)
21+
// Space: O(1)
22+
// sort, greedy
23+
class Solution2 {
24+
public:
25+
long long minOperationsToMakeMedianK(vector<int>& nums, int k) {
26+
sort(begin(nums), end(nums));
27+
int64_t result = 0;
28+
for (int i = 0; i <= size(nums) / 2; ++i) {
29+
result += max(nums[i] - k, 0);
30+
}
31+
for (int i = size(nums) / 2; i < size(nums); ++i) {
32+
result += max(k - nums[i], 0);
33+
}
34+
return result;
35+
}
36+
};

0 commit comments

Comments
 (0)