public class Solution { private static TValue GetOrDefault(Dictionary map, TKey key, TValue defaultValue) { if (map.TryGetValue(key, out var value)) { return value; } return defaultValue; } public int NumberOfArithmeticSlices(int[] nums) { var n = nums.Length; var total = 0; var dp = new Dictionary[n]; for (var i = 0; i < n; ++i) { dp[i] = new Dictionary(); } for (var i = 1; i < n; ++i) { for (var j = 0; j < i; ++j) { var diff = (long)nums[i] - nums[j]; if (diff < int.MinValue || diff > int.MaxValue) { continue; } int count = GetOrDefault(dp[j], diff, 0); total += count; dp[i][diff] = 1 + count + GetOrDefault(dp[i], diff, 0); } } return total; } }