文物朝代判断
难度:
标签:
题目描述
English description is not available for the problem. Please switch to Chinese.
代码结果
运行时间: 44 ms, 内存: 14.7 MB
/*
题目思路:
1. 使用Java Stream对数组进行处理。
2. 过滤掉值为0的元素。
3. 找到过滤后数组的最大值和最小值。
4. 判断最大值和最小值之间的差是否小于5,如果小于5,则表示这些元素是连续的。
*/
import java.util.Arrays;
public class Solution {
public boolean isConsecutive(int[] places) {
int min = Arrays.stream(places).filter(x -> x != 0).min().orElse(Integer.MAX_VALUE);
int max = Arrays.stream(places).filter(x -> x != 0).max().orElse(Integer.MIN_VALUE);
return max - min < 5; // 判断最大值和最小值之差是否小于5
}
}
解释
方法:
该题解的核心思想是利用集合来检查是否有重复的朝代编号,并同时记录遇到的最大和最小的朝代编号(不考虑编号为0的未知朝代)。首先,遍历数组中的所有元素,如果元素为0,则跳过;如果元素已存在于集合中,则表示出现了重复的朝代编号,直接返回False。如果元素不在集合中,则将其添加到集合,并更新最大和最小朝代编号的记录。最后,检查最大和最小朝代编号的差是否小于5,如果是,则说明朝代编号连续或存在未知朝代,返回True;否则,返回False。
时间复杂度:
O(1)
空间复杂度:
O(1)
代码细节讲解
🦆
题解中提到如果数组中的元素已存在于集合中则直接返回False,这是基于什么样的考虑?是否意味着重复的朝代编号一定不连续?
▷🦆
在题解的逻辑中,最后判断最大和最小朝代编号的差是否小于5来决定返回值,这种方法是否能准确处理所有边界情况?例如,如果未知朝代0出现在数组的两端,会对结果产生怎样的影响?
▷🦆
题解中未提及如何处理所有元素均为0的特殊情况,这种情况下该如何返回结果?
▷🦆
题解中使用了集合来存储非0朝代编号以检查重复,这里使用集合而不是其他数据结构(如列表或字典)的原因是什么?
▷