LeetCode in Kotlin

2826. Sorting Three Groups

Medium

You are given a 0-indexed integer array nums of length n.

The numbers from 0 to n - 1 are divided into three groups numbered from 1 to 3, where number i belongs to group nums[i]. Notice that some groups may be empty.

You are allowed to perform this operation any number of times:

A new array res is constructed using the following procedure:

  1. Sort the numbers in each group independently.
  2. Append the elements of groups 1, 2, and 3 to res in this order.

Array nums is called a beautiful array if the constructed array res is sorted in non-decreasing order.

Return the minimum number of operations to make nums a beautiful array.

Example 1:

Input: nums = [2,1,3,2,1]

Output: 3

Explanation: It’s optimal to perform three operations:

  1. change nums[0] to 1.
  2. change nums[2] to 1.
  3. change nums[3] to 1.

After performing the operations and sorting the numbers in each group, group 1 becomes equal to [0,1,2,3,4] and group 2 and group 3 become empty. Hence, res is equal to [0,1,2,3,4] which is sorted in non-decreasing order.

It can be proven that there is no valid sequence of less than three operations.

Example 2:

Input: nums = [1,3,2,1,3,3]

Output: 2

Explanation: It’s optimal to perform two operations:

  1. change nums[1] to 1.
  2. change nums[2] to 1.

After performing the operations and sorting the numbers in each group, group 1 becomes equal to [0,1,2,3], group 2 becomes empty, and group 3 becomes equal to [4,5]. Hence, res is equal to [0,1,2,3,4,5] which is sorted in non-decreasing order.

It can be proven that there is no valid sequence of less than two operations.

Example 3:

Input: nums = [2,2,2,2,3,3]

Output: 0

Explanation: It’s optimal to not perform operations.

After sorting the numbers in each group, group 1 becomes empty, group 2 becomes equal to [0,1,2,3] and group 3 becomes equal to [4,5]. Hence, res is equal to [0,1,2,3,4,5] which is sorted in non-decreasing order.

Constraints:

Solution

import kotlin.math.max

class Solution {
    fun minimumOperations(nums: List<Int>): Int {
        val n = nums.size
        val arr = IntArray(3)
        var max = 0
        for (num in nums) {
            var locMax = 0
            val value = num
            for (j in 0 until value) {
                locMax = max(locMax, arr[j])
            }
            locMax++
            arr[value - 1] = locMax
            if (locMax > max) {
                max = locMax
            }
        }
        return n - max
    }
}
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