File tree Expand file tree Collapse file tree 1 file changed +54
-0
lines changed Expand file tree Collapse file tree 1 file changed +54
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments