数组 A 包含 N 个数,且索引从0开始。数组 A 的一个子数组划分为数组 (P, Q),P 与 Q 是整数且满足 0<=P<Q<N 。
如果满足以下条件,则称子数组(P, Q)为等差数组:
元素 A[P], A[p + 1], ..., A[Q - 1], A[Q] 是等差的。并且 P + 1 < Q 。
函数要返回数组 A 中所有为等差数组的子数组个数
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/arithmetic-slices
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
A = [1, 2, 3, 4]
返回: 3, A 中有三个子等差数组: [1, 2, 3], [2, 3, 4] 以及自身 [1, 2, 3, 4]
本题需要注意的几个地方:
* 1. 子等差数组一定要相邻
* 2. 满足等差
* 因此本题只要固定第一个元素,然后遍历后面所有数,* 只要满足都sum+1; 否则,退出当前循环。
1 public class NumberOfArithmeticSlices {
2 public int numberOfArithmeticSlices(int[] nums) {
3 /**
4 * 思想:暴力
5 * 题解:
6 * 本题需要注意的几个地方:
7 * 1. 子等差数组一定要相邻
8 * 2. 满足等差
9 * 因此本题只要固定第一个元素,然后遍历后面所有数,
10 * 只要满足都sum+1; 否则,退出当前循环。
11 */
12 int sum = 0;
13 for(int i = 0; i < nums.length - 2; i++) {
14 int curId = 1, temp = nums[i + 1] - nums[i];
15 for(int j = i + 2; j < nums.length; j++) {
16 if(temp * curId + nums[i + 1] == nums[j]) {
17 curId++;
18 sum++;
19 } else {
20 break;
21 }
22 }
23 }
24 return sum;
25 }
26
27 public static void main(String[] args) {
28 int[] nums = {1, 2, 3, 4, 5, 6};
29 System.out.println(new NumberOfArithmeticSlices().numberOfArithmeticSlices(nums));
30 }
31 }
原文:https://www.cnblogs.com/haifwu/p/14815517.html