如果你想在校招中顺利拿到更好的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

说明: 输入的数组长度最大不超过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