• [Swift]LeetCode446. 等差数列划分 II


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10339587.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    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]

    如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。

    例如,以下数列为等差数列:

    1, 3, 5, 7, 9
    7, 7, 7, 7
    3, -1, -5, -9

    以下数列不是等差数列。

    1, 1, 2, 5, 7 

    数组 A 包含 N 个数,且索引从 0 开始。该数组子序列将划分为整数序列 (P0, P1, ..., Pk),P 与 Q 是整数且满足 0 ≤ P0 < P1 < ... < Pk < N。 

    如果序列 A[P0],A[P1],...,A[Pk-1],A[Pk] 是等差的,那么数组 A 的子序列 (P0,P1,…,PK) 称为等差序列。值得注意的是,这意味着 k ≥ 2。

    函数要返回数组 A 中所有等差子序列的个数。

    输入包含 N 个整数。每个整数都在 -231 和 231-1 之间,另外 0 ≤ N ≤ 1000。保证输出小于 231-1。 

    示例: 

    输入:[2, 4, 6, 8, 10]
    
    输出:7
    
    解释:
    所有的等差子序列为:
    [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]

    1128ms
     1 class Solution {
     2     func numberOfArithmeticSlices(_ A: [Int]) -> Int {
     3         var res:Int = 0
     4         var n:Int = A.count
     5         var dp:[[Int:Int]] = [[Int:Int]](repeating:[Int:Int](),count:n)
     6         for i in 0..<n
     7         {
     8             for j in 0..<i
     9             {
    10                 var delta:Int64 = Int64(A[i]) - Int64(A[j])
    11                 if delta > Int64(Int.max) || delta < Int64(Int.min) {continue}
    12                 var diff:Int = Int(delta)
    13                 
    14                 if dp[i][diff] == nil
    15                 {
    16                     dp[i][diff] = 1
    17                 }
    18                 else
    19                 {
    20                     dp[i][diff]! += 1                    
    21                 }
    22                 
    23                 if dp[j][diff] != nil
    24                 {
    25                     res += dp[j][diff]!
    26                     dp[i][diff]! += dp[j][diff]!
    27                 }
    28             }
    29         }
    30         return res
    31     }
    32 }


  • 相关阅读:
    EF获取DbContext中已注册的所有实体类型
    使用一阶微分对图像锐化
    数字图像处理之直方图均衡
    【HDFS】相关概念及常用命令
    【Java】ConcurrentHashMap源码解析
    【Java】对foreach循环的思考
    php生成二维码
    spilt
    strtolower
    in_array
  • 原文地址:https://www.cnblogs.com/strengthen/p/10339587.html
Copyright © 2020-2023  润新知