1. 思路
这虽然是一道简单题,但是看完题目,求数组间的差值的最长数列,首先就能够想到双指针,利用双指针进行统计。
2.问题思路难点
对于排序完之后的数组,进行双指针的
1. 双指针使用 类似滑动窗口的操作
2. 双指针的结果值返回
3.结果
利用
class Solution {
public int findLHS(int[] nums) {
//先进行排序操作
Arrays.sort(nums);
//定义开始指针 和 结果
int begin = 0,res = 0;
//遍历数组
for(int end = 0;end < nums.length;end++){
while(nums[end] - nums[begin] > 1){
begin++;
}
if(nums[end] - nums[begin] == 1){
res = Math.max(res,end - begin + 1);
}
}
return res;
}
}
优秀思路参考
因为此类题的特殊性,在进行数据遍历的的时候,我们会遇到重复计算操作,对于重复计算的操作可以利用map去解决重复性计算;map利用key和key+1直接能够计算最终结果。
public static int findLHS(int[] nums) {
// 子序列中 最大值 与 最小值 相差1
HashMap<Integer, Integer> map = new HashMap<>();
int res = 0;
for (int num : nums) {
map.put(num, map.getOrDefault(num, 0) + 1);
}
//查询相差为1的数据
for (Integer key : map.keySet()) {
if (map.containsKey(key+1)){
res = Math.max(res,map.get(key)+map.get(key+1));
}
}
return res;
}
总结:每天一题,坚持 加油