DDSA Solutions

2780. Minimum Index of a Valid Split

Time: O(n)
Space: O(1)
Advertisement

Intuition

Minimum index of valid split: dominant element appears > half times in both halves. Find dominant element, then first valid split.

Algorithm

  1. 1Boyer-Moore to find dominant element. Verify majority. Scan left: when left count > left_size/2: check right.

Common Pitfalls

  • Dominant = majority element. First valid split where it dominates both halves.
2780.cs
C#
// Approach: Find dominant element via Boyer-Moore vote; scan for first valid split point.
// Time: O(n) Space: O(1)

public class Solution
{
    public int MinimumIndex(IList<int> nums)
    {
        int n = nums.Count;
        Dictionary<int, int> count1 = new Dictionary<int, int>();
        Dictionary<int, int> count2 = new Dictionary<int, int>();

        foreach (int num in nums)
        {
            if (count2.ContainsKey(num))
                count2[num]++;
            else
                count2[num] = 1;
        }

        for (int i = 0; i < n; ++i)
        {
            if (count1.ContainsKey(nums[i]))
                count1[nums[i]]++;
            else
                count1[nums[i]] = 1;

            if (count2.ContainsKey(nums[i]))
            {
                count2[nums[i]]--;
                if (count2[nums[i]] == 0)
                    count2.Remove(nums[i]);
            }

            int freq1 = count1[nums[i]];
            int freq2 = count2.ContainsKey(nums[i]) ? count2[nums[i]] : 0;

            if (freq1 * 2 > i + 1 && freq2 * 2 > n - 1 - i)
                return i;
        }

        return -1;
    }
}
Advertisement
Was this solution helpful?