任务描述为:
我有一个从 1 到 n 的不同数字数组,例如 arr = [5, 3, 4, 1, 2]
将名为 order 的变量初始化为 1,现在从左到右遍历数组并查找与变量 order 匹配的元素,如果找到则增加 order 并向前移动。换句话说,我们可以说将名为 order 的变量初始化为 1,因此首先从左到右遍历数组并查看 1 在数组中出现的位置,然后将 order 增加到 2,然后在数组中向前移动并查找 2,如果找到则将 order 增加到 3。像上面那样从左到右迭代称为操作
当 arr = [5,3,4,1,2] 时,从左到右依次遍历,当找到 arr[3] 时,order 的值从 1 变为 2,当找到 arr[4] 时,order 的值从 2 变为 3
重复上述步骤,直到变量阶达到值n。重复的次数称为操作。
因此当 arr [ 5,3,4,1,2] 时,所需的最少操作数为 3
import java.util.*;
class Main {
public static int solve(List<Integer> arr) {
int n = arr.size();
int order = 0; // Number of sorted items found
int operations = 0; // Count of full array scan
while (sortedCount < n) {
order++;
for (int i = 0; i < n; i++) {
if (arr.get(i) == order + 1) {
order++;
}
}
}
return operations;
}
public static void main(String[] args) {
System.out.println(solve(Arrays.asList(5, 3, 4, 1, 2))); // Output: 3
System.out.println(solve(Arrays.asList(3,1,4,2,5))); // Output: 2
System.out.println(solve(Arrays.asList(1,2,3,4))); // Output: 1
System.out.println(solve(Arrays.asList(2,1))); // Output: 2
}
}
我的代码运行时间为 O(n^2),我们如何才能以更低的时间复杂度解决这个问题