LeetCode in Kotlin

969. Pancake Sorting

Medium

Given an array of integers arr, sort the array by performing a series of pancake flips.

In one pancake flip we do the following steps:

For example, if arr = [3,2,1,4] and we performed a pancake flip choosing k = 3, we reverse the sub-array [3,2,1], so arr = [1,2,3,4] after the pancake flip at k = 3.

Return an array of the k-values corresponding to a sequence of pancake flips that sort arr. Any valid answer that sorts the array within 10 * arr.length flips will be judged as correct.

Example 1:

Input: arr = [3,2,4,1]

Output: [4,2,4,3]

Explanation:

We perform 4 pancake flips, with k values 4, 2, 4, and 3.

Starting state: arr = [3, 2, 4, 1]

After 1st flip (k = 4): arr = [1, 4, 2, 3]

After 2nd flip (k = 2): arr = [4, 1, 2, 3]

After 3rd flip (k = 4): arr = [3, 2, 1, 4]

After 4th flip (k = 3): arr = [1, 2, 3, 4], which is sorted.

Example 2:

Input: arr = [1,2,3]

Output: []

Explanation: The input is already sorted, so there is no need to flip anything. Note that other answers, such as [3, 3], would also be accepted.

Constraints:

Solution

class Solution {
    fun pancakeSort(arr: IntArray): List<Int> {
        val result: MutableList<Int> = ArrayList()
        for (i in arr.size downTo 1) {
            var max = Int.MIN_VALUE
            var index = 0
            for (j in 0 until i) {
                if (max < arr[j]) {
                    index = j + 1
                    max = arr[j]
                }
            }
            result.add(index)
            reverse(arr, index - 1)
            result.add(i)
            reverse(arr, i - 1)
        }
        return result
    }

    private fun reverse(arr: IntArray, index: Int) {
        for (i in 0..(index - 1) / 2) {
            val temp = arr[i]
            arr[i] = arr[index - i]
            arr[index - i] = temp
        }
    }
}
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy