LeetCode Entry

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

31.08.2026 medium 2026 kotlin rust

Min and max distance between extremums

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

https://dmitrysamoylenko.com/leetcode/

31.08.2026.webp

Join me on Telegram

https://t.me/leetcode_daily_unstoppable/1468

Problem TLDR

Min and max distance between extremums

Intuition

Iterate, find extremums, track the position.

Approach

  • use the sequence
  • Rust itertools unfold

Complexity

  • Time complexity: \(O(n)\)

  • Space complexity: \(O(1)\)

Code

    fun nodesBetweenCriticalPoints(h: ListNode?) =
    generateSequence(h) { it.next }.map { it.`val` }.windowed(3)
    .mapIndexedNotNull { i, (a, b, c) -> i.takeIf { 1L*(a-b)*(c-b) > 0 }}
    .toList().run {
        if (size < 2) listOf(-1, -1)
        else listOf(-zipWithNext(Int::minus).max(), last()-first())
    }
    pub fn nodes_between_critical_points(h: Option<Box<ListNode>>) -> Vec<i32> {
        let v: Vec<_> = unfold(h, |n| n.take().map(|b| { *n = b.next; b.val }))
            .tuple_windows().positions(|(a, b, c)| (a-b)as i64*(c-b)as i64>0)
            .map(|i| i as i32).collect();
        if v.len() < 2 { vec![-1, -1] } else
        { vec![v.windows(2).map(|w| w[1] - w[0]).min().unwrap(), v.last().unwrap() - v[0]] }
    }

Comments