1. 解题思路
这一题我们只需要分别考察一下将数组调整为以下两种情况是否可行以及调整所需的最小操作数即可:
- 先奇数后偶数
- 先偶数后奇数
而在每一种情况下,我们只需要首先判断一下数量是否正确,然后按原始顺序依次将所有的元素置换到 0 , 2 , 4 , 6 ⋯ 0,2,4,6 \cdots 0,2,4,6⋯位置上即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def minSwaps(self, nums: List[int]) -> int:
even, odd = [], []
for i, num in enumerate(nums):
if num % 2 == 0:
even.append(i)
else:
odd.append(i)
n = len(nums)
def get_op_num(locs):
if len(locs) != (n+1) // 2:
return math.inf
ans = 0
for i, loc in enumerate(locs):
ans += abs(loc-2*i)
return ans
ans = min(get_op_num(even), get_op_num(odd))
return ans if ans != math.inf else -1
提交代码评测得到:耗时耗时150ms,占用内存30.01MB。