Учитывая массив с n элементами, можем ли мы отсортировать этот массив в порядке возрастания, выполнив только одну операцию свопинга?
Например, для следующего массива:
int[] data = {1 , 9 , 6, 3}
Нам нужно поменять местами только 9 на 3 и что только одна операция смены, по которой мой массив может быть в порядке возрастания. Если массив уже отсортирован в порядке возрастания, мы можем напрямую вернуть true.
Я начал с кода ниже, но я застрял, и я не уверен, как мне следует продолжить?
public static boolean verifyOrder(int[] data) {
List<Integer> input = new ArrayList<Integer>();
for (int index = 0; index < data.length; index++) {
input.add(data[index]);
}
int j = 0;
while (j < input.size() - 1 && input.get(j) <= input.get(j + 1)) {
j++;
}
if (j == input.size() - 1) {
// yes we can sort array with only one swap operation
return true;
}
// not sure how should I proceed?
}
Каков эффективный способ решения этой проблемы?