376.wiggle-subsequence.go 386 B

1234567891011121314151617181920212223
  1. func wiggleMaxLength(nums []int) int {
  2. n := len(nums)
  3. if n <= 1 {
  4. return n
  5. }
  6. i, max, pre := 1, 1, 0
  7. for ; i < n; i++ { // Find the first slope
  8. diff := nums[i] - nums[i-1]
  9. if diff != 0 {
  10. pre = diff
  11. max++
  12. break
  13. }
  14. }
  15. for i = i + 1; i < n; i++ { // Count the change of dir
  16. diff := nums[i] - nums[i-1]
  17. if pre*diff < 0 {
  18. pre = diff
  19. max++
  20. }
  21. }
  22. return max
  23. }