酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

给出一个1到n的排列,即1到n每个数字只出现一次。 每次可以移动一个数到一个任意位置。 问:如果我们想要把这个排列移动成:1,2,3……n,至少移动多少次? c++

以下是一个使用 C++ 解决此问题的示例代码: ```cpp #include <iostream> #include <vector> int minMoves(std::vector<int>& nums) { int n = nums.size(); int count = 0; for (int i = 0; i < n; ++i) { while (nums[i]!= i + 1) { std::swap(nums[i], nums[nums[i] - 1]); count++; } } return count; } int main() { std::vector<int> nums = {2, 1, 3}; int moves = minMoves(nums); std::cout << "最少移动次数: " << moves << std::endl; return 0; } ``` 在上述代码中,`minMoves` 函数通过不断交换当前位置上数字与它应在位置上数字的位置,直到整个数组变成有序,同时统计交换的次数。在 `main` 函数中给出了示例的输入和输出。 [2024-08-17 11:15:03 | AI写代码神器 | 243点数解答]

相关提问