1. 具体题目

和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度。

示例 1:

输入: [1,3,2,2,5,2,3,7]  输出: 5  原因: 最长的和谐数组是:[3,2,2,2,3]

说明: 输入的数组长度最大不超过20,000.

2. 思路分析

由于题目不要求子序列中元素在原数组中是连续的,只要求该子序列中元素最多即可。所以考虑在遍历数组时记录各元素的个数,将其记录在一个哈希表中(key-num, value-num个数)。

而对于一个数"num",可以与其组成和谐序列的数只有"num+1"或"num-1",所以对于"num",当前最长和谐序列的长度就是"num的个数" + "num+1的个数",或者"num的个数" + "num-1的个数",那么在遍历数组的同时就可以更新结果值longest。

注意:若对于"num",当前map中没有"num+1"或"num-1",那么其和谐序列长度为0。

3. 代码

 public int findLHS(int[] nums) {
HashMap<Integer,Integer> map = new HashMap<>();
int longest = 0;
for(int i = 0; i < nums.length; i++){
if(map.containsKey(nums[i])){
int newValue = map.get(nums[i]) + 1;
map.put(nums[i], newValue);
}else{
map.put(nums[i], 1);
}
int temp =
map.containsKey(nums[i] - 1) ? map.get(nums[i] - 1) + map.get(nums[i]) : 0;
longest = Math.max(longest, temp);
temp =
map.containsKey(nums[i] + 1) ? map.get(nums[i] + 1) + map.get(nums[i]) : 0;
longest = Math.max(longest, temp);
}
return longest;
}

4. 代码优化

//冗余,可以用一个方法代替
for(int i = 0; i < nums.length; i++){
if(map.containsKey(nums[i])){
int newValue = map.get(nums[i]) + 1;
map.put(nums[i], newValue);
}else{
map.put(nums[i], 1);
} //HashMap api中方法getOrDefault()
map.put(num, map.getOrDefault(num, 0) + 1);

最新文章

  1. Format
  2. python2.7版本win7 64位系统安装pandas注意事项_20161226
  3. Bootstrap 3 简介
  4. JVM中的垃圾收集算法和Heap分区简记
  5. VPN理论简单介绍(转载)
  6. Node基础:域名解析DNS(ok)
  7. CSS3 box-flex属性和box-orient属性
  8. 【BZOJ 2453|bzoj 2120】 2453: 维护队列 (分块+二分)
  9. EPEL库安装
  10. UIScrollView的属性
  11. 如何在Objective-C中实现链式语法?
  12. javascript实现图片无缝滚动(scrollLeft的使用方法介绍)
  13. 王立平--include在Android应用
  14. docker 17 安装
  15. rpm 相关问题
  16. DAY23、面向对象特性
  17. Simple Sort
  18. NATS—消息通信模型
  19. ButterKnife RadioGroup选择事件
  20. Enhancement in SAP abap.

热门文章

  1. 高水线 High water mark(HWM)
  2. npm yarn bower (前端必会的工具)
  3. 转 jmeter 实现loadrunner init end 功能
  4. js实现页面跳转的几种方法小结
  5. js中函数的创建和调用都发生了什么?执行环境,函数作用域链,变量对象
  6. 【linux】centos6/7 + nginx 利用certbot 申请https证书
  7. Pytest---yield
  8. PHP操作XML方法之 XML Expat Parser
  9. java是否是“美丽的”语言
  10. position: absolute 如果不设置left, right, top, bottom会在什么位置