这个问题可以通过排序和计数来解决。首先,我们将数组排序,然后我们遍历排序后的数组,对于每个元素,我们将它变为它应该在正则序列中的值,也就是它的索引加1。我们将这个变化的绝对值累加起来,这就是我们需要的最小操作次数。
以下是C++代码实现:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> arr(n);
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr.begin(), arr.end());
long long res = 0;
for (int i = 0; i < n; i++) {
res += abs(arr[i] - (i + 1));
}
cout << res << endl;
return 0;
}
在这段代码中,我们首先读取输入的数组长度n和数组元素,然后我们对数组进行排序。然后我们遍历排序后的数组,对于每个元素,我们将它变为它应该在正则序列中的值,也就是它的索引加1,然后将这个变化的绝对值累加到结果中。最后,我们输出结果,这就是我们需要的最小操作次数。
这段代码的时间复杂度是O(n log n),其中n是数组的长度。因为我们需要对数组进行排序,这个操作的时间复杂度是O(n log n)。然后我们需要遍历数组,这个操作的时间复杂度是O(n)。所以总的时间复杂度是O(n log n)。
这段代码的空间复杂度是O(n),因为我们需要存储输入的数组。