LeetCode 446. Arithmetic Slices II - Subsequence

原创 2016年11月17日 10:13:14

欢迎移步到我的个人博客

版权声明:本文为博主原创文章,转载请注明出处,谢谢!

题目要求

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

题意解析

这道题的含义就是找出数列中所有3个数以上的等差数列的数量。

解法分析

使用动态规划来解这道题。假设dp[i][j]表示以A[i]结尾的子序列(P0, P1, …, Pi)构成的数列,序列中的元素之差为j。而dp[i][j]=dp[k][j]>0?dp[k][j]+1:1,0<=i

解题代码

    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;
    }

Leetcode-446. Arithmetic Slices II - Subsequence

题目: A sequence of numbers is called arithmetic if it consists of at least three elements and if th...
  • caoyan_12727
  • caoyan_12727
  • 2016-12-06 20:52:36
  • 551

446. Arithmetic Slices II - Subsequence

原题网址:https://leetcode.com/problems/arithmetic-slices-ii-subsequence/ A sequence of numbers is c...
  • jmspan
  • jmspan
  • 2016-12-04 04:18:05
  • 899

Arithmetic Slices II - Subsequence

越往后做题越难了啊,像这种题不看答案根本没头绪 嘛,其实看个几天逐步推导应该也能有个大概思路,可惜最近真的没时间 记个discuss统一认同的答案吧 class Solution { publi...
  • popvip44
  • popvip44
  • 2017-01-07 10:20:00
  • 139

LeetCode 446. Arithmetic Slices II - Subsequence

LeetCode 446. Arithmetic Slices II - Subsequence
  • luzheqi
  • luzheqi
  • 2016-11-17 10:13:14
  • 889

446. Arithmetic Slices II - Subsequence

题目:A sequence of numbers is called arithmetic if it consists of at least three elements and if the d...
  • lizhb5
  • lizhb5
  • 2017-04-27 19:56:59
  • 98

446. Arithmetic Slices II - Subsequence***

A sequence of numbers is called arithmetic if it consists of at least three elements and if the diff...
  • alwaystry
  • alwaystry
  • 2016-12-11 12:43:38
  • 106

Arithmetic Slices II - Subsequence

一. Arithmetic Slices II - SubsequenceA sequence of numbers is called arithmetic if it consists of at...
  • u014652699
  • u014652699
  • 2017-03-21 19:35:46
  • 64

[LeetCode]446. Arithmetic Slices II - Subsequence

https://leetcode.com/problems/arithmetic-slices-ii-subsequence/#/description 找到乱序数组中所有gap相同的子序列个数...
  • gqk289
  • gqk289
  • 2017-03-15 11:46:21
  • 143

LeetCode 413.Arithmetic Slices 解题报告

LeetCode 413. Arithmetic Slices 解题报告
  • camellhf
  • camellhf
  • 2016-10-15 17:36:55
  • 2657

[Leetcode] 446. Arithmetic Slices II - Subsequence 解题报告

题目: A sequence of numbers is called arithmetic if it consists of at least three elements and if...
  • magicbean2
  • magicbean2
  • 2017-11-10 16:04:58
  • 78
收藏助手
不良信息举报
您举报文章:LeetCode 446. Arithmetic Slices II - Subsequence
举报原因:
原因补充:

(最多只允许输入30个字)