2024-01-07 Daily Challenge
Today I have done leetcode's January LeetCoding Challenge with cpp
.
January LeetCoding Challenge 7
Description
Arithmetic Slices II - Subsequence
Given an integer array nums
, return the number of all the arithmetic subsequences of nums
.
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,
[1, 3, 5, 7, 9]
,[7, 7, 7, 7]
, and[3, -1, -5, -9]
are arithmetic sequences. - For example,
[1, 1, 2, 5, 7]
is not an arithmetic sequence.
A subsequence of an array is a sequence that can be formed by removing some elements (possibly none) of the array.
- For example,
[2,5,10]
is a subsequence of[1,2,1,2,4,1,5,10]
.
The test cases are generated so that the answer fits in 32-bit integer.
Example 1:
Input: nums = [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]
Example 2:
Input: nums = [7,7,7,7,7] Output: 16 Explanation: Any subsequence of this array is arithmetic.
Constraints:
1 <= nums.length <= 1000
-231 <= nums[i] <= 231 - 1
Solution
auto speedup = [](){
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
return 0;
}();
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& nums) {
using ll = long long;
int len = nums.size();
int answer = 0;
vector<unordered_map<ll, int>> dp(len);
for(int i = 1; i < len; ++i) {
for(int j = 0; j < i; ++j) {
ll diff = (ll)nums[i] - nums[j];
int result = dp[j].count(diff) ? dp[j][diff] : 0;
dp[i][diff] += result + 1;
answer += result;
}
}
return answer;
}
};
// Accepted
// 101/101 cases passed (512 ms)
// Your runtime beats 63.89 % of cpp submissions
// Your memory usage beats 41.39 % of cpp submissions (155.2 MB)