11package problem0239
22
33// 参看 https://leetcode.com/problems/sliding-window-maximum/discuss/65881/O(n)-solution-in-Java-with-two-simple-pass-in-the-array
4- // 例子
5- // nums = [2,1,3,4,6,3,8,9,10,12,56], k=4
6- // split 2, 1, 3, 4 | 6, 3, 8, 9 | 10, 12, 56 // every k number into a group
7- // left 2, 2, 3, 4 | 6, 6, 8, 9 | 10, 12, 56
8- // right 4, 4, 4, 4 | 9, 9, 9, 9 | 56, 56, 56
9- // res[i] = max(right_max[i], left[i+w-1])
10- // res 4, 6, 6, 8,| 9, 10, 12, 56
114func maxSlidingWindow (nums []int , k int ) []int {
125 size := len (nums )
136 if k <= 1 {
@@ -17,19 +10,19 @@ func maxSlidingWindow(nums []int, k int) []int {
1710 g := k - 1
1811
1912 left := make ([]int , size )
20- left [0 ] = nums [0 ]
21- for i := 1 ; i < size ; i ++ {
22- if i % g == 1 {
13+ for i := 0 ; i < size ; i ++ {
14+ if i % g == 0 {
2315 left [i ] = nums [i ]
2416 } else {
2517 left [i ] = max (nums [i ], left [i - 1 ])
2618 }
2719 }
2820
2921 right := make ([]int , size )
22+ // size-1 很可能不是那组的最后一个,需要单独列出
3023 right [size - 1 ] = nums [size - 1 ]
3124 for j := size - 2 ; j >= 0 ; j -- {
32- if j % g == 0 {
25+ if ( j + 1 ) % g == 0 {
3326 right [j ] = nums [j ]
3427 } else {
3528 right [j ] = max (nums [j ], right [j + 1 ])
0 commit comments