Leetcode594.最长和谐子序列
目录
- 题目
- 算法标签: 滑动窗口, 哈希表
- 思路
- 滑动窗口代码
- 哈希表代码
题目
594. 最长和谐子序列
算法标签: 滑动窗口, 哈希表
思路
先将数组进行排序, 检查两个相邻的但是不相等的数字的差值是否是 1 1 1, 如果是 1 1 1更新答案
滑动窗口代码
#include <algorithm>
#include <vector>
#include <string>
#include <queue>
#include <set>using namespace std;class Solution {
public:int findLHS(vector<int>& nums) {sort(nums.begin(), nums.end());int l = 0, r = 0, n = nums.size();int ans = 0;while (r < n) {while (l <= r && nums[r] - nums[l] > 1) l++;if (nums[r] - nums[l] == 1) ans = max(ans, r - l + 1);r++;}return ans;}
};
哈希表代码
#include <algorithm>
#include <vector>
#include <string>
#include <queue>
#include <map>using namespace std;class Solution {
public:int findLHS(vector<int>& nums) {map<int, int> mp;int n = nums.size();for (int val : nums) mp[val]++;int ans = 0;for (auto [val, cnt] : mp) {if (mp.count(val + 1)) {ans = max(ans, cnt + mp[val + 1]);}}return ans;}
};