2501.数组中最长的方波
链接:2501.数组中最长的方波
难度:Medium
标签:数组、哈希表、二分查找、动态规划、排序
简介:返回 nums 中 最长方波 的长度,如果不存在 方波 则返回 -1 。
题解 1 - cpp
- 编辑时间:2022-12-11
- 执行用时:244ms
- 内存消耗:105.7MB
- 编程语言:cpp
- 解法介绍:哈希后遍历。
class Solution {
public:
int longestSquareStreak(vector<int>& nums) {
sort(nums.begin(), nums.end());
int n = nums.size(), ans = -1;
unordered_map<int, int> m;
for (int i = 0; i < n; i++) {
if (!m.count(nums[i])) m[nums[i]] = i;
}
vector<int> dp(n, 1);
for (int i = 0; i < n; i++) {
int num = nums[i], prev = sqrt(num);
//cout << "num = " << num << ", p = " << prev << endl;
if (prev * prev != num) continue;
if (!m.count(prev)) continue;
dp[i] = max(dp[i], dp[m[prev]] + 1);
//cout << "i = " << i << ", dp = " << dp[i] << endl;
if (dp[i] > 1) ans = max(ans, dp[i]);
}
return ans;
}
};