题解 | #连续的牛群标签序列#【Java】
连续的牛群标签序列
https://www.nowcoder.com/practice/5db36ae74c274176a0cf9274e9f9ed3e?tpId=354&tqId=10595872&ru=/exam/oj&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Foj
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param tag int整型一维数组
* @return int整型
*/
public int longestConsecutive(int[] tag) {
HashSet<Integer> hashSet = new HashSet<>();
int min = Integer.MAX_VALUE;
for (int i = 0; i < tag.length; i++) {
if(tag[i]<min){
min = tag[i];
}
hashSet.add(tag[i]);
}
int length = 1;
int max = Integer.MIN_VALUE;
Iterator<Integer> iterator = hashSet.iterator();
while(iterator.hasNext()){
Integer next = iterator.next();
while(true){
if(hashSet.contains(next+1)){
length++;
next++;
}else{
break;
}
}
max = Math.max(max,length);
length = 1;
}
return max;
}
}
本题知识点分析:
1.哈希表的存取
2.数组遍历
3.API取最大值(Math.max)
4.迭代器遍历
本题解题思路分析:
1.先将所有数字放入hashSet有重复的直接去重,因为求的连续最长序列,重复数字没有用
2.迭代器遍历hashSet,每次取出的数字,然后去判断是否有next++,也就是连续递增的数字
3.记录每个数字连续递增的最大长度,然后用max函数比较,取最大长度
4.最后返回最大长度即可
5.题解的时间复杂度是O(n),别看两个while(true)就是O(n2),HashSet的contains方法可以在常数时间内判断元素是否存在。
本题使用编程语言: Java
题目明确不能使用排序,并且要时间复杂度O(n),我都不知道有些人做题是为了什么?搁着面试的时候,不按面试官要求来?
如果本篇文章对您有帮助的话,可以点个赞支持一下,感谢~
高频面试算法题解 文章被收录于专栏
高频面试算法题解,每天一小步,人生一大步,跟着一起刷起来!

查看9道真题和解析