Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 09214df

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /