func wiggleMaxLength(nums []int) int { n := len(nums) if n <= 1 { return n } i, max, pre := 1, 1, 0 for ; i < n; i++ { // Find the first slope diff := nums[i] - nums[i-1] if diff != 0 { pre = diff max++ break } } for i = i + 1; i < n; i++ { // Count the change of dir diff := nums[i] - nums[i-1] if pre*diff < 0 { pre = diff max++ } } return max }