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
}