Problem Link

Description


You are given an integer array nums containing distinct numbers, and you can perform the following operations until the array is empty:

  • If the first element has the smallest value, remove it
  • Otherwise, put the first element at the end of the array.

Return an integer denoting the number of operations it takes to make nums empty.

 

Example 1:

Input: nums = [3,4,-1]
Output: 5
OperationArray
1[4, -1, 3]
2[-1, 3, 4]
3[3, 4]
4[4]
5[]

Example 2:

Input: nums = [1,2,4,3]
Output: 5
OperationArray
1[2, 4, 3]
2[4, 3]
3[3, 4]
4[4]
5[]

Example 3:

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

 

Constraints:

  • 1 <= nums.length <= 105
  • -10<= nums[i] <= 109
  • All values in nums are distinct.

Solution


Python3

class Solution:
    def countOperationsToEmptyArray(self, nums: List[int]) -> int:
        N = len(nums)
        A = sorted(range(N), key = lambda i : nums[i])
        res = N
 
        for i in range(N - 1):
            if A[i] > A[i + 1]:
                res += N - i - 1
        
        return res