Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- public class Main {
- public static void main(String[] args) {
- Scanner s = new Scanner(System.in);
- int n = s.nextInt();
- s.nextLine();
- String[] line = s.nextLine().split(" ");
- long[] arr = new long[n];
- int i = 0;
- for (String each : line) {
- arr[i++] = Integer.parseInt(each);
- }
- long[] sortedArray = deepCopy(arr);
- Arrays.sort(sortedArray);
- int numSwaps, reverseNumSwaps;
- System.out.println("");
- numSwaps = getMinSwaps(arr, sortedArray);
- reverseNumSwaps = getMinSwaps(arr, reverse(sortedArray));
- System.out.println(numSwaps>reverseNumSwaps?reverseNumSwaps:numSwaps);
- }
- private static int getMinSwaps(long[] arr, long[] sortedArr) {
- int swaps = 0;
- Map<Long, Integer> position = new HashMap<>();
- for (int i = 0; i < arr.length; i++) {
- position.put(arr[i], i);
- }
- for (int i = 0; i < arr.length; i++) {
- if (arr[i] != sortedArr[i]) {
- swaps++;
- int ind_to_swap = position.get(sortedArr[i]);
- position.put(arr[i], ind_to_swap);
- arr[ind_to_swap] = arr[i];
- arr[i] = sortedArr[i];
- }
- }
- return swaps;
- }
- private static long[] reverse(long[] arr) {
- long[] newArr = new long[arr.length];
- int l = arr.length;
- for (int i = 0; i < l; i++) {
- newArr[i] = arr[l - 1 - i];
- }
- return newArr;
- }
- private static long[] deepCopy(long[] arr) {
- long[] arrCopy = new long[arr.length];
- int i = 0;
- for (long each : arr) {
- arrCopy[i++] = each;
- }
- return arrCopy;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement