滑動視窗。視窗左邊從下標0開始,右邊從下標2開始,判斷當前右下標的值能否與之前構成等差數列。
是。結果加1(最左到當前構成等差數列),再加上 最左+1 與 當前-1 之間新增等差數列數。例如:1,2,3,4,5,當視窗到5時,除了加上1到5這個等差數列,還要加上2,3,4新增的個數(即1個)。1,2,3,4,5,6,視窗到6,加上2,3,4,5新增的個數(有3個,但2,3,4在前面算過了,所以2個·,即 i - left - 3)
否。結果加上以左+1 ,左+ 2 ...到 當前-1的等差數列數。修改等差數列差distance,以及視窗left。例如1,2,3,4,5,7,8,當右視窗到7時,不符合,結果加上2到5,3到5即2個等差數列(即i - left - 3),將左視窗指到5,distance為7-5=2。
右邊繼續滑動。滑到最後判斷是否需要加上對應個數(i - left - 3,相當於一次否的情況)。
public int numberofarithmeticslices(int a)
// 設初值
int left = 0;
int res = 0;
int distance = a[1] - a[0];
// 右視窗滑動
for(int i = 2;i < len;i++)
} else
// 滑動左視窗 改變公差
left = i - 1;
distance = a[i] - a[i-1];}}
// 加上移動左視窗新增個數
if(len - left > 3)
return res;
}
Leetcode 413 等差數列劃分
如果乙個數列至少有三個元素,並且任意兩個相鄰元素之差相同,則稱該數列為等差數列。例如,以下數列為等差數列 1,3,5,7,9 7,7,7,7 3,1,5,9 以下數列不是等差數列。1,1,2,5,7陣列 a 包含 n 個數,且索引從0開始。陣列 a 的乙個子陣列劃分為陣列 p,q p 與 q 是整數...
Leetcode 413 等差數列劃分
如果乙個數列至少有三個元素,並且任意兩個相鄰元素之差相同,則稱該數列為等差數列。例如,以下數列為等差數列 1,3,5,7,9 7,7,7,7 3,1,5,9以下數列不是等差數列。1,1,2,5,7陣列 a 包含 n 個數,且索引從0開始。陣列 a 的乙個子陣列劃分為陣列 p,q p 與 q 是整數且...
Leetcode 413 等差數列劃分
如果乙個數列至少有三個元素,並且任意兩個相鄰元素之差相同,則稱該數列為等差數列。例如,以下數列為等差數列 1,3,5,7,9 7,7,7,7 3,1,5,9 以下數列不是等差數列。1,1,2,5,7 陣列 a 包含 n 個數,且索引從0開始。陣列 a 的乙個子陣列劃分為陣列 p,q p 與 q 是整...