Pancake Sorting

MediumArrayTwo PointersGreedySorting

Solution

export function pancakeSort(arr: number[]): number[] {
  const n = arr.length;
  const answer: number[] = [];
  for (let num = n; 0 < num; num--) {
    const numIndex = arr.indexOf(num);
    if (numIndex === num - 1) {
      continue;
    }
    if (numIndex !== 0) {
      answer.push(numIndex + 1);
      flip(arr, numIndex + 1);
    }
    answer.push(num);
    flip(arr, num);
  }
  return answer;
}
 
export function flip(arr: number[], k: number) {
  const mid = Math.ceil(k / 2);
  for (let i = 0; i < mid; i++) {
    [arr[i], arr[k - i - 1]] = [arr[k - i - 1], arr[i]];
  }
}

Complexity

  • Time: O(n2)O(n^2)
  • Space: O(n)O(n)