From f5293e88a180bbfce37eb9891f501bb837eaca22 Mon Sep 17 00:00:00 2001 From: CyC2018 Date: Wed, 15 May 2019 00:01:38 +0800 Subject: [PATCH] auto commit --- ...50\346\200\201\350\247\204\345\210\222.md" | 28 +++++++++++++++++-- ...50\346\200\201\350\247\204\345\210\222.md" | 28 +++++++++++++++++-- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git "a/docs/notes/Leetcode \351\242\230\350\247\243 - \345\212\250\346\200\201\350\247\204\345\210\222.md" "b/docs/notes/Leetcode \351\242\230\350\247\243 - \345\212\250\346\200\201\350\247\204\345\210\222.md" index 53d6890d..a82a16f2 100644 --- "a/docs/notes/Leetcode \351\242\230\350\247\243 - \345\212\250\346\200\201\350\247\204\345\210\222.md" +++ "b/docs/notes/Leetcode \351\242\230\350\247\243 - \345\212\250\346\200\201\350\247\204\345\210\222.md" @@ -269,13 +269,35 @@ class NumArray { [413. Arithmetic Slices (Medium)](https://leetcode.com/problems/arithmetic-slices/description/) ```html -A = [1, 2, 3, 4] -return: 3, for 3 arithmetic slices in A: [1, 2, 3], [2, 3, 4] and [1, 2, 3, 4] itself. +A = [0, 1, 2, 3, 4] + +return: 6, for 3 arithmetic slices in A: + +[0, 1, 2], +[1, 2, 3], +[0, 1, 2, 3], +[0, 1, 2, 3, 4], +[ 1, 2, 3, 4], +[2, 3, 4] ``` dp[i] 表示以 A[i] 为结尾的等差递增子区间的个数。 -在 A[i] - A[i - 1] == A[i - 1] - A[i - 2] 的条件下,{A[i - 2], A[i - 1], A[i]} 是一个等差递增子区间。如果 {A[i - 3], A[i - 2], A[i - 1]} 是一个等差递增子区间,那么 {A[i - 3], A[i - 2], A[i - 1], A[i]} 也是等差递增子区间,dp[i] = dp[i-1] + 1。 +当 A[i] - A[i-1] == A[i-1] - A[i-2],那么 [A[i-2], A[i-1], A[i]] 构成一个等差递增子区间。而且在以 A[i-1] 为结尾的递增子区间的后面再加上一个 A[i],一样可以构成新的递增子区间。 + +```html +dp[2] = 1 + [0, 1, 2] +dp[3] = dp[2] + 1 = 2 + [0, 1, 2, 3], // [0, 1, 2] 之后加一个 3 + [1, 2, 3] // 新的递增子区间 +dp[4] = dp[3] + 1 = 3 + [0, 1, 2, 3, 4], // [0, 1, 2, 3] 之后加一个 4 + [1, 2, 3, 4], // [1, 2, 3] 之后加一个 4 + [2, 3, 4] // 新的递增子区间 +``` + +综上,在 A[i] - A[i-1] == A[i-1] - A[i-2] 时,dp[i] = dp[i-1] + 1。 ```java public int numberOfArithmeticSlices(int[] A) { diff --git "a/notes/Leetcode \351\242\230\350\247\243 - \345\212\250\346\200\201\350\247\204\345\210\222.md" "b/notes/Leetcode \351\242\230\350\247\243 - \345\212\250\346\200\201\350\247\204\345\210\222.md" index c3d004f7..4b4ce59e 100644 --- "a/notes/Leetcode \351\242\230\350\247\243 - \345\212\250\346\200\201\350\247\204\345\210\222.md" +++ "b/notes/Leetcode \351\242\230\350\247\243 - \345\212\250\346\200\201\350\247\204\345\210\222.md" @@ -269,13 +269,35 @@ class NumArray { [413. Arithmetic Slices (Medium)](https://leetcode.com/problems/arithmetic-slices/description/) ```html -A = [1, 2, 3, 4] -return: 3, for 3 arithmetic slices in A: [1, 2, 3], [2, 3, 4] and [1, 2, 3, 4] itself. +A = [0, 1, 2, 3, 4] + +return: 6, for 3 arithmetic slices in A: + +[0, 1, 2], +[1, 2, 3], +[0, 1, 2, 3], +[0, 1, 2, 3, 4], +[ 1, 2, 3, 4], +[2, 3, 4] ``` dp[i] 表示以 A[i] 为结尾的等差递增子区间的个数。 -在 A[i] - A[i - 1] == A[i - 1] - A[i - 2] 的条件下,{A[i - 2], A[i - 1], A[i]} 是一个等差递增子区间。如果 {A[i - 3], A[i - 2], A[i - 1]} 是一个等差递增子区间,那么 {A[i - 3], A[i - 2], A[i - 1], A[i]} 也是等差递增子区间,dp[i] = dp[i-1] + 1。 +当 A[i] - A[i-1] == A[i-1] - A[i-2],那么 [A[i-2], A[i-1], A[i]] 构成一个等差递增子区间。而且在以 A[i-1] 为结尾的递增子区间的后面再加上一个 A[i],一样可以构成新的递增子区间。 + +```html +dp[2] = 1 + [0, 1, 2] +dp[3] = dp[2] + 1 = 2 + [0, 1, 2, 3], // [0, 1, 2] 之后加一个 3 + [1, 2, 3] // 新的递增子区间 +dp[4] = dp[3] + 1 = 3 + [0, 1, 2, 3, 4], // [0, 1, 2, 3] 之后加一个 4 + [1, 2, 3, 4], // [1, 2, 3] 之后加一个 4 + [2, 3, 4] // 新的递增子区间 +``` + +综上,在 A[i] - A[i-1] == A[i-1] - A[i-2] 时,dp[i] = dp[i-1] + 1。 ```java public int numberOfArithmeticSlices(int[] A) { -- GitLab