Skip to content

Commit 09214df

Browse files
committed
2967. Minimum Cost to Make Array Equalindromic
1 parent 3ed21c0 commit 09214df

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
class Solution {
2+
3+
// Solution by Sergey Leschev
4+
// 2967. Minimum Cost to Make Array Equalindromic
5+
6+
// Time complexity: O(n log n)
7+
// Space complexity: O(1)
8+
9+
func minimumCost(_ nums: [Int]) -> Int {
10+
var sortedNums = nums.sorted()
11+
var med = 0
12+
let len = sortedNums.count
13+
med = sortedNums[len / 2]
14+
let num1 = palindrome1(med)
15+
let num2 = palindrome2(med)
16+
let sum1 = findSum(sortedNums, num1)
17+
let sum2 = findSum(sortedNums, num2)
18+
return sum1 < sum2 ? sum1 : sum2
19+
}
20+
21+
private func palindrome1(_ num: Int) -> Int {
22+
var num = num
23+
while !check(num) {
24+
num -= 1
25+
}
26+
return num
27+
}
28+
29+
private func palindrome2(_ num: Int) -> Int {
30+
var num = num
31+
while !check(num) {
32+
num += 1
33+
}
34+
return num
35+
}
36+
37+
private func check(_ n: Int) -> Bool {
38+
var dup = n
39+
var rev = 0
40+
while dup != 0 {
41+
rev = rev * 10 + (dup % 10)
42+
dup /= 10
43+
}
44+
return rev == n
45+
}
46+
47+
private func findSum(_ nums: [Int], _ n: Int) -> Int {
48+
var sum = 0
49+
for i in 0..<nums.count {
50+
sum += abs(n - nums[i])
51+
}
52+
return sum
53+
}
54+
}

0 commit comments

Comments
 (0)