diff --git a/239-sliding-window-maximum.go b/239-sliding-window-maximum.go index ab29aef..43b65bf 100644 --- a/239-sliding-window-maximum.go +++ b/239-sliding-window-maximum.go @@ -39,8 +39,20 @@ func (w *Window) Max(prevMax WindowMaximum) WindowMaximum { return maxBruteForce(w.nums, w.begin, w.end) } - if (w.nums[w.begin-1] == w.nums[w.begin]) && (w.nums[w.end-1] == w.nums[w.end]) { - return prevMax + if w.nums[w.begin-1] == w.nums[w.begin] { + if w.nums[w.end-1] == w.nums[w.end] { + return prevMax + } else { + if w.nums[w.end] >= prevMax.value { + return WindowMaximum{value: w.nums[w.end], valid: true, index: w.end} + } + } + } else { + if w.nums[w.end-1] == w.nums[w.end] { + if w.nums[w.begin] >= prevMax.value { + return WindowMaximum{value: w.nums[w.begin], valid: true, index: w.begin} + } + } } if !w.InWindow(prevMax.index) {