Skip to main content

Minimum Rotations to Sort

MediumArraySortingGreedyMath

Description

Given an array nums of distinct integers, return the minimum number of left rotations needed to make the array sorted in non-decreasing order. A left rotation moves the first element to the end of the array. If nums cannot be sorted by any number of left rotations, return -1.

Examples

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

Three left rotations: [3,4,5,1,2] → [4,5,1,2,3] → [5,1,2,3,4] → [1,2,3,4,5].

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

Already sorted; zero rotations needed.

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

More than one descent in cyclic order; cannot be sorted via rotation.

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

One left rotation yields [1,2,3,4,5].

Constraints

  • 1 ≤ nums.length ≤ 10⁵
  • -10⁹ ≤ nums[i] ≤ 10⁹
  • All values in nums are distinct.

Ready to solve this problem?

Practice solo and sharpen your skills for technical interviews.