![在这里插入图片描述](https://img-blog.csdnimg.cn/2021072010153149.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25leHR0cmlhbA==,size_16,color_FFFFFF,t_70)
使用动态规划法, mpVal2len数组中的元素 mpVal2len[i] = j表示 i 在原nums数组中的最长序列长度为j.
function longestConsecutive($nums) {
$len = count($nums);
if ($len == 0 || $len == 1) {
return $len;
}
$mpVal2Len = [];
$maxLen = 1;
foreach ($nums as $num) {
if (array_key_exists($num, $mpVal2Len)) {
continue;
}
$leftLen = $mpVal2Len[$num-1] ?? 0;
$rightLen = $mpVal2Len[$num+1] ?? 0;
$mpVal2Len[$num] = $leftLen + $rightLen + 1;
$maxLen = max($maxLen, $mpVal2Len[$num]);
$mpVal2Len[$num-$leftLen] = $mpVal2Len[$num];
$mpVal2Len[$num+$rightLen] = $mpVal2Len[$num];
}
return $maxLen;
}