You are viewing a single comment's thread. Return to all comments →
Java
List<Integer> sorted = new ArrayList<>(arr); Collections.sort(sorted); int swapCount = 0; int segmentSize = 0; List<Integer> indices = new ArrayList<>(); if (arr.equals(sorted)) { System.out.println("yes"); } else { // Swap for (int i = 0; i < arr.size(); i++) { if (arr.get(i) != sorted.get(i)) { swapCount++; indices.add(i + 1); indices.add(arr.indexOf(sorted.get(i)) + 1); } } // Reverse for (int i = 0; i < arr.size() - 1; i++) { if (arr.get(i) > arr.get(i + 1)) { segmentSize++; } else { if (segmentSize > 1) { List<Integer> startArr = new ArrayList<>(arr.subList(0, i - segmentSize)); List<Integer> subArr = new ArrayList<>(arr.subList(i - segmentSize, i + 1)); List<Integer> endArr = new ArrayList<>(arr.subList(i + 1, arr.size())); Collections.reverse(subArr); arr.clear(); arr.addAll(startArr); arr.addAll(subArr); arr.addAll(endArr); indices.add(i + 1); indices.add(i - segmentSize + 1); break; } segmentSize = 0; } } if (swapCount == 2) { // Swap System.out.println("yes"); System.out.println("swap " + indices.get(0) + " " + indices.get(1)); } else if (arr.equals(sorted)) { // Reverse System.out.println("yes"); System.out.println("reverse " + indices.get(indices.size() - 1) + " " + indices.get(indices.size() - 2)); } else { System.out.println("no"); } } }
Seems like cookies are disabled on this browser, please enable them to open this website
Almost Sorted
You are viewing a single comment's thread. Return to all comments →
Java