题目
代码部分一(73ms 34.54%)
class Solution {
public int findLHS(int[] nums) {
if(nums == null || nums.length == 0) return 0;
int res = 0;
int cur = 0, next = 0;
Map<Integer, Integer> map = new HashMap<>();
Arrays.sort(nums);
for(int i : nums){
map.put(i, map.getOrDefault(i,0) + 1);
}
for(int i = 0; i < nums.length - 1; i++){
if(nums[i+1] == nums[i]) continue;
if(nums[i+1] - nums[i] == 1){
res = Math.max(map.get(nums[i + 1]) + map.get(nums[i]), res);
}
}
return res;
}
}
代码部分二(55ms 78.56%)
class Solution {
public int findLHS(int[] nums) {
int res = 0;
Map<Integer, Integer> map = new HashMap<>();
for(int i : nums){
map.put(i, map.getOrDefault(i,0) + 1);
}
for(int j : map.keySet()){
if(map.containsKey(j+1)){
res = Math.max(res, map.get(j) + map.get(j+1));
}
}
return res;
}
}
代码部分三(35ms 98.99%)
class Solution {
public int findLHS(int[] nums) {
if(nums == null || nums.length == 0 || nums.length == 1)
return 0;
Arrays.sort(nums);
int max = 0, temp = nums[0], begin = 0, index = 0;
boolean flag = false;
for(int i = 1; i <= nums.length; i++){
if(i == nums.length || nums[i] != temp){
if(flag){
max = max > (i - begin) ? max : (i - begin);
begin = index;
}
if(i == nums.length) break;
if(nums[i] - temp == 1){
flag = true;
}else{
flag = false;
begin = i;
}
temp = nums[i];
index = i;
}
}
return max;
}
}