如果你想在校招中顺利拿到更好的offer,阿秀建议你多看看前人的经验 ,比如准备 、简历 、实习 、上岸经历 、校招总结 、阿里、字节、腾讯、美团等一二线大厂真实面经 、也欢迎来一起参加秋招打卡活动 等;如果你是计算机小白,学习/转行/校招路上感到迷茫或者需要帮助,可以点此联系阿秀;免费分享阿秀个人学习计算机以来的收集到的好资源,点此白嫖;如果你需要《阿秀的学习笔记》网站中求职相关知识点的PDF版本的话,可以点此下载
# 594. 最长和谐子序列
力扣原题链接(点我直达) (opens new window)
和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。
现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度。
示例 1:
输入: [1,3,2,2,5,2,3,7]
输出: 5
原因: 最长的和谐数组是:[3,2,2,2,3].
1
2
3
2
3
说明: 输入的数组长度最大不超过20,000.
# 第一版,犯糊涂了,要用有序的map才对,中规中矩
执行用时 :136 ms, 在所有 cpp 提交中击败了59.33%的用户
内存消耗 :20.7 MB, 在所有 cpp 提交中击败了51.40%的用户
int findLHS(vector<int>& nums) {
if (nums.size() <= 1) return 0;
sort(nums.begin(), nums.end(), greater<int>());
map<int, int> result;//元素,次数
int maxLen = 0, temp,len=nums.size();
for (unsigned i = 0; i < len; ++i) {
result[nums[i]]++;
}
for (auto beg = result.begin(), beg2 = ++result.begin(); beg2 != result.end() && beg != result.end();++beg,++beg2 ) {
if (1+beg->first == beg2->first) {
temp = beg->second + beg2->second;
maxLen = temp > maxLen ? temp : maxLen;
// cout << maxLen << endl;
// cout << beg->first << " " << beg2->first << " " << temp << endl;
}
}
// cout << maxLen << endl;
return maxLen;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26