Back to Month
MEDIUM 31 Aug 2026 View on LeetCode

2058. Find the Minimum and Maximum Number of Nodes Between Critical Points

</> Solution

class Solution {
    public int[] nodesBetweenCriticalPoints(ListNode head) {
        List<Integer> criticalPoints = new ArrayList<>();
        
        ListNode prev = head;
        ListNode curr = head.next;
        int index = 1;
        
        while (curr.next != null) {
            // Local maxima: curr > prev AND curr > next
            // Local minima: curr < prev AND curr < next
            if ((curr.val > prev.val && curr.val > curr.next.val) ||
                (curr.val < prev.val && curr.val < curr.next.val)) {
                criticalPoints.add(index);
            }
            prev = curr;
            curr = curr.next;
            index++;
        }
        
        // Fewer than 2 critical points
        if (criticalPoints.size() < 2) {
            return new int[]{-1, -1};
        }
        
        int minDist = Integer.MAX_VALUE;
        int maxDist = criticalPoints.get(criticalPoints.size() - 1) 
                    - criticalPoints.get(0);
        
        // Min distance is always between consecutive critical points
        for (int i = 1; i < criticalPoints.size(); i++) {
            minDist = Math.min(minDist, 
                      criticalPoints.get(i) - criticalPoints.get(i - 1));
        }
        
        return new int[]{minDist, maxDist};
    }
}

TIME COMPLEXITY

O(n)

SPACE COMPLEXITY

O(1)

TOPICS

Array Linked List