跳到主要内容

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