904. 水果成篮
https://leetcode-cn.com/problems/fruit-into-baskets/
暴力法:超时
func totalFruit(tree []int) int { res := 0 n := len(tree) i,j := 0,0 for i=0;i<n;i++{ pre1,pre2 := -1,-1 for j=i;j<n;j++{ if pre1 == -1 || pre1 == tree[j]{ pre1 = tree[j] continue }else if pre2 == -1 || pre2 == tree[j]{ pre2 = tree[j] continue }else{ if tree[j] == pre1 || tree[j] == pre2{ continue } res = MAX(res,j-i) break } } res = MAX(res,j-i) } return res } func MAX(i,j int) int{ if i<j{ return j }else{ return i } }
用滑动窗口优化下时间复杂度:最主要一点,
tRight := right-1 pre1 = tree[tRight]
pre2 = tree[right]
func totalFruit(tree []int) int { res := 0 n := len(tree) left,right := 0,0 pre1,pre2 := -1,-1 for right < n{ if pre1 == -1 || pre1 == tree[right]{ pre1 = tree[right] right++ continue }else if pre2 == -1 || pre2 == tree[right]{ pre2 = tree[right] right++ continue }else{ res = MAX(res,right-left) tRight := right-1 pre1 = tree[tRight] pre2 = tree[right] for tree[tRight] == pre1{ tRight-- } left = tRight+1 } } res = MAX(res,right-left) return res } func MAX(i,j int) int{ if i<j{ return j }else{ return i } }