LeetCode in Kotlin

1388. Pizza With 3n Slices

Hard

There is a pizza with 3n slices of varying size, you and your friends will take slices of pizza as follows:

Given an integer array slices that represent the sizes of the pizza slices in a clockwise direction, return the maximum possible sum of slice sizes that you can pick.

Example 1:

Input: slices = [1,2,3,4,5,6]

Output: 10

Explanation: Pick pizza slice of size 4, Alice and Bob will pick slices with size 3 and 5 respectively. Then Pick slices with size 6, finally Alice and Bob will pick slice of size 2 and 1 respectively. Total = 4 + 6.

Example 2:

Input: slices = [8,9,8,6,1,1]

Output: 16

Explanation: Pick pizza slice of size 8 in each turn. If you pick slice with size 9 your partners will pick slices of size 8.

Constraints:

Solution

class Solution {
    fun maxSizeSlices(slices: IntArray): Int {
        val n = slices.size
        val third = n / 3
        return Math.max(
            maxSizeSlices(slices, 0, n - 2, third), maxSizeSlices(slices, 1, n - 1, third)
        )
    }

    private fun maxSizeSlices(slices: IntArray, start: Int, end: Int, parts: Int): Int {
        val dp = IntArray(slices.size)
        var res = 0
        for (i in 0 until parts) {
            var prev = 0
            var prevPrev = 0
            for (j in end downTo start) {
                val curr = dp[j]
                dp[j] = slices[j] + prevPrev
                prevPrev = prev
                prev = Math.max(curr, prev)
                res = Math.max(res, dp[j])
            }
        }
        return res
    }
}