leetcode.哈希表.594最长和谐子序列-Java
2024-09-07 18:15:32
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);
最新文章
- Format
- python2.7版本win7 64位系统安装pandas注意事项_20161226
- Bootstrap 3 简介
- JVM中的垃圾收集算法和Heap分区简记
- VPN理论简单介绍(转载)
- Node基础:域名解析DNS(ok)
- CSS3 box-flex属性和box-orient属性
- 【BZOJ 2453|bzoj 2120】 2453: 维护队列 (分块+二分)
- EPEL库安装
- UIScrollView的属性
- 如何在Objective-C中实现链式语法?
- javascript实现图片无缝滚动(scrollLeft的使用方法介绍)
- 王立平--include在Android应用
- docker 17 安装
- rpm 相关问题
- DAY23、面向对象特性
- Simple Sort
- NATS—消息通信模型
- ButterKnife RadioGroup选择事件
- Enhancement in SAP abap.
热门文章
- 高水线 High water mark(HWM)
- npm yarn bower (前端必会的工具)
- 转 jmeter 实现loadrunner init end 功能
- js实现页面跳转的几种方法小结
- js中函数的创建和调用都发生了什么?执行环境,函数作用域链,变量对象
- 【linux】centos6/7 + nginx 利用certbot 申请https证书
- Pytest---yield
- PHP操作XML方法之 XML Expat Parser
- java是否是“美丽的”语言
- position: absolute 如果不设置left, right, top, bottom会在什么位置