Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class Main {
  4.  
  5. public static void main(String[] args) {
  6. Scanner s = new Scanner(System.in);
  7. int n = s.nextInt();
  8. s.nextLine();
  9. String[] line = s.nextLine().split(" ");
  10. long[] arr = new long[n];
  11. int i = 0;
  12. for (String each : line) {
  13. arr[i++] = Integer.parseInt(each);
  14. }
  15. long[] sortedArray = deepCopy(arr);
  16. Arrays.sort(sortedArray);
  17. int numSwaps, reverseNumSwaps;
  18. System.out.println("");
  19. numSwaps = getMinSwaps(arr, sortedArray);
  20. reverseNumSwaps = getMinSwaps(arr, reverse(sortedArray));
  21. System.out.println(numSwaps>reverseNumSwaps?reverseNumSwaps:numSwaps);
  22. }
  23.  
  24. private static int getMinSwaps(long[] arr, long[] sortedArr) {
  25. int swaps = 0;
  26. Map<Long, Integer> position = new HashMap<>();
  27. for (int i = 0; i < arr.length; i++) {
  28. position.put(arr[i], i);
  29. }
  30. for (int i = 0; i < arr.length; i++) {
  31. if (arr[i] != sortedArr[i]) {
  32. swaps++;
  33. int ind_to_swap = position.get(sortedArr[i]);
  34. position.put(arr[i], ind_to_swap);
  35. arr[ind_to_swap] = arr[i];
  36. arr[i] = sortedArr[i];
  37. }
  38. }
  39. return swaps;
  40. }
  41.  
  42. private static long[] reverse(long[] arr) {
  43. long[] newArr = new long[arr.length];
  44. int l = arr.length;
  45. for (int i = 0; i < l; i++) {
  46. newArr[i] = arr[l - 1 - i];
  47. }
  48. return newArr;
  49. }
  50.  
  51. private static long[] deepCopy(long[] arr) {
  52. long[] arrCopy = new long[arr.length];
  53. int i = 0;
  54. for (long each : arr) {
  55. arrCopy[i++] = each;
  56. }
  57. return arrCopy;
  58. }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement