Problem of the day: Pancake Sorting
Problem description: https://leetcode.com/problems/pancake-sorting/
Solution Approach:
At every iteration for n-1 iterations move the max element in unsorted prefix array to the end of it by following the following steps:
- Find max element index in unsorted prefix part.
- flip array at that index.
- flip array at index marking the end of unsorted array.
- reduce the pointer marking end of unsorted array by 1 thereby decreasing the unsorted part of the array.
Solution:
class Solution { public List<Integer> pancakeSort(int[] arr) { if (arr.length<=1) { return new ArrayList<>(); } List<Integer> maxIndicesSelectedForFlip; int endOfUnsortedArray = arr.length-1; for (int idx=1; idx <= endOfUnsortedArray; idx++) { //find maxElement, maxElementIndex int maxElement = Integer.MIN_VALUE, maxElementIndex = -1; for (int i=0; i < endOfUnsortedArray; i++) { if (arr[i]>maxElement) { maxElement = arr[i]; maxElementIndex = i; } } //Flip 0->maxElementIndex flip(arr, maxElementIndex); maxIndicesSelectedForFlip.add(maxElementIndex+1); //Flip 0->endOfUnsortedArray flip(arr, endOfUnsortedArray); maxIndicesSelectedForFlip.add(endOfUnsortedArray+1); } return maxIndicesSelectedForFlip; } private void flip(int[] arr, int maxIndex) { for (int i=0; i<=maxIndex/2; i++) { int tmp = arr[i]; arr[i] = arr[maxIndex-i]; arr[maxIndex-i] = tmp; } } }
Time Complexity: O(n^2)
Space Complexity: In-place sorting: O(1)
Happy Coding! ;)
No comments:
Post a Comment