Appearance
题目
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
示例 2:
输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9
输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9
提示:
- 0 <= nums.length <= 104
- 109 <= nums[i] <= 109
理解题目
找出数组中最长的连续长度
题解
利用set去重,然后去判断当前的项+1是否存在于Set集合中,有就增加长度
答案
ts
//自个
function longestConsecutive(nums: number[]): number {
if(!nums.length) return 0
nums.sort((a,b)=>a-b)
nums = [...new Set([...nums])]
const s:Set<number> = new Set()
const ss:Set<number> = new Set()
let len=1
for(const [i,d] of nums.entries()){
if(!s.has(d)){
s.add(d)
}
const nextValue = d+1
s.add(nextValue)
if(nextValue === nums[i+1]){
len++
}else{
ss.add(len)
len= 1
}
}
return Math.max(...ss)
};
//自个
function longestConsecutive(nums: number[]): number {
if(!nums.length) return 0
nums.sort((a,b)=>a-b)
nums = [...new Set([...nums])]
const s:Set<number> = new Set()
const ss:Set<number> = new Set()
let len=1
for(const [i,d] of nums.entries()){
if(!s.has(d)){
s.add(d)
}
const nextValue = d+1
s.add(nextValue)
if(nextValue === nums[i+1]){
len++
}else{
ss.add(len)
len= 1
}
}
return Math.max(...ss)
};
ts
//官方
function longestConsecutive(nums: number[]): number {
let new_set:Set<number> = new Set()
for(let num of nums){
new_set.add(num)
}
let len = 0
for(let num of new_set){
if(!new_set.has(num-1)){
let currentNum = num
let currentStreak= 1
while (new_set.has(currentNum+1)) {
currentNum+=1
currentStreak+=1
}
len = Math.max(len,currentStreak)
}
}
return len
};
//官方
function longestConsecutive(nums: number[]): number {
let new_set:Set<number> = new Set()
for(let num of nums){
new_set.add(num)
}
let len = 0
for(let num of new_set){
if(!new_set.has(num-1)){
let currentNum = num
let currentStreak= 1
while (new_set.has(currentNum+1)) {
currentNum+=1
currentStreak+=1
}
len = Math.max(len,currentStreak)
}
}
return len
};