# LeetCode 446. Arithmetic Slices II - Subsequence

154 篇文章 0 订阅
8 篇文章 0 订阅

### 题目要求

A sequence of numbers is called arithmetic if it consists of at least three elements and if the difference between any two consecutive elements is the same.

For example, these are arithmetic sequences:

1, 3, 5, 7, 9
7, 7, 7, 7
3, -1, -5, -9
The following sequence is not arithmetic.

1, 1, 2, 5, 7

A zero-indexed array A consisting of N numbers is given. A subsequence slice of that array is any sequence of integers (P0, P1, …, Pk) such that 0 ≤ P0 < P1 < … < Pk < N.

A subsequence slice (P0, P1, …, Pk) of array A is called arithmetic if the sequence A[P0], A[P1], …, A[Pk-1], A[Pk] is arithmetic. In particular, this means that k ≥ 2.

The function should return the number of arithmetic subsequence slices in the array A.

The input contains N integers. Every integer is in the range of -231 and 231-1 and 0 ≤ N ≤ 1000. The output is guaranteed to be less than 231-1.

Example:

Input: [2, 4, 6, 8, 10]

Output: 7

Explanation:
All arithmetic subsequence slices are:
[2,4,6]
[4,6,8]
[6,8,10]
[2,4,6,8]
[4,6,8,10]
[2,4,6,8,10]
[2,6,10]
Subscribe to see which companies asked this question

### 解题代码

    public int numberOfArithmeticSlices(int[] A) {
int re = 0;
HashMap<Integer, HashMap<Long, Integer>> diffMaps = new HashMap<>();
for (int i = 0; i < A.length; i++) {
HashMap<Long, Integer> diffMap = new HashMap<>();
diffMaps.put(i, diffMap);
int num = A[i];
for (int j = 0; j < i; j++) {
if ((long) num - A[j] > Integer.MAX_VALUE)
continue;
if ((long) num - A[j] < Integer.MIN_VALUE)
continue;
long diff = (long) num - A[j];
int count = diffMaps.get(j).getOrDefault(diff, 0);
diffMaps.get(i).put(diff, diffMaps.get(i).getOrDefault(diff, 0) + count + 1);
re += count;
}
}
return re;
}
• 0
点赞
• 0
收藏
觉得还不错? 一键收藏
• 0
评论
10-19 222
09-24 1584
03-01 198
10-29 4837
08-04 1486
01-18 1557
07-21 269

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、付费专栏及课程。