mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-06 09:23:19 +08:00
41 lines
701 B
Go
41 lines
701 B
Go
package leetcode
|
|
|
|
func minimumDeviation(nums []int) int {
|
|
min, max := 0, 0
|
|
for i := range nums {
|
|
if nums[i]%2 == 1 {
|
|
nums[i] *= 2
|
|
}
|
|
if i == 0 {
|
|
min = nums[i]
|
|
max = nums[i]
|
|
} else if nums[i] < min {
|
|
min = nums[i]
|
|
} else if max < nums[i] {
|
|
max = nums[i]
|
|
}
|
|
}
|
|
res := max - min
|
|
for max%2 == 0 {
|
|
tmax, tmin := 0, 0
|
|
for i := range nums {
|
|
if nums[i] == max || (nums[i]%2 == 0 && min <= nums[i]/2) {
|
|
nums[i] /= 2
|
|
}
|
|
if i == 0 {
|
|
tmin = nums[i]
|
|
tmax = nums[i]
|
|
} else if nums[i] < tmin {
|
|
tmin = nums[i]
|
|
} else if tmax < nums[i] {
|
|
tmax = nums[i]
|
|
}
|
|
}
|
|
if tmax-tmin < res {
|
|
res = tmax - tmin
|
|
}
|
|
min, max = tmin, tmax
|
|
}
|
|
return res
|
|
}
|