元素计数
难度:
标签:
题目描述
代码结果
运行时间: 22 ms, 内存: 16.1 MB
/*
* 题目思路:
* 1. 使用Java Stream API 找到最大值和最小值。
* 2. 使用Stream过滤符合条件的元素,并统计个数。
*/
import java.util.Arrays;
public class Solution {
public int countElements(int[] nums) {
int min = Arrays.stream(nums).min().orElse(Integer.MAX_VALUE);
int max = Arrays.stream(nums).max().orElse(Integer.MIN_VALUE);
// 使用Stream过滤符合条件的元素,并统计个数
return (int) Arrays.stream(nums)
.filter(num -> num > min && num < max)
.count();
}
}
解释
方法:
此题解通过首先对数组进行排序,确保数组元素按照从小到大的顺序排列。排序后,数组的第一个元素是最小元素,最后一个元素是最大元素。接着,定义两个变量a和b,分别存储数组中的最小值和最大值。然后,遍历排序后的数组,对于数组中的每个元素i,如果i既不等于a也不等于b,说明i有至少一个严格较小的元素和至少一个严格较大的元素,将其添加到结果列表res中。最后,返回结果列表res中元素的个数,即为题目所求的满足条件的元素数目。
时间复杂度:
O(n log n)
空间复杂度:
O(n)
代码细节讲解
🦆
在此题解中,为什么在排序后直接使用min和max函数来确定最小和最大元素,而不是直接使用排序后的数组的第一个和最后一个元素?
▷🦆
题解中提到使用列表res来存放满足条件的元素,是否有更高效的方法来计算这些元素的数量而不需要实际存储它们?
▷🦆
在实现中,为何选择遍历整个数组来找到满足条件的元素,是否可以通过直接计数的方式简化这一过程?
▷🦆
题解假设所有元素都是唯一的,如果数组中有重复元素,这种算法是否仍然适用?
▷