- [Leetcode 3551. Minimum Swaps to Sort by Digit Sum](#Leetcode 3551. Minimum Swaps to Sort by Digit Sum)
- [1. 解题思路](#1. 解题思路)
- [2. 代码实现](#2. 代码实现)
1. 解题思路
这一题思路上我实现的非常暴力,就是先求出正确的排列,然后从头考察每一个元素是否处在其目标位置上,如果没有,则给出一次置换。
2. 代码实现
给出python代码实现如下:
python
class Solution:
def minSwaps(self, nums: List[int]) -> int:
n = len(nums)
def fn(num):
return sum(int(digit) for digit in str(num))
index = {x: i for i, x in enumerate(nums)}
sorted_nums = sorted(nums, key=lambda x: (fn(x), x))
ans = 0
for i in range(n):
if nums[i] == sorted_nums[i]:
continue
x, y = nums[i], sorted_nums[i]
j = index[y]
nums[i], nums[j] = y, x
index[x] = j
index[y] = i
ans += 1
return ans
提交代码评测得到:耗时1894ms,占用内存45.8MB。