2148-元素计数

Raphael Liu Lv10

给你一个整数数组 nums ,统计并返回在 nums 中同时至少具有一个严格较小元素和一个严格较大元素的元素数目。

示例 1:

**输入:** nums = [11,7,2,15]
**输出:** 2
**解释:** 元素 7 :严格较小元素是元素 2 ,严格较大元素是元素 11 。
元素 11 :严格较小元素是元素 7 ,严格较大元素是元素 15 。
总计有 2 个元素都满足在 nums 中同时存在一个严格较小元素和一个严格较大元素。

示例 2:

**输入:** nums = [-3,3,3,90]
**输出:** 2
**解释:** 元素 3 :严格较小元素是元素 -3 ,严格较大元素是元素 90 。
由于有两个元素的值为 3 ,总计有 2 个元素都满足在 nums 中同时存在一个严格较小元素和一个严格较大元素。

提示:

  • 1 <= nums.length <= 100
  • -105 <= nums[i] <= 105

方法一:按要求判断

思路与算法

对于数组中的一个元素,它「同时具有一个严格较小元素和一个严格较大元素」等价于它「既不等于数组中的最大值,也不等于数组中元素的最小值」。

因此我们可以首先遍历数组 nums,求出数组元素的最大值 largest 与最小值 smallest。随后,我们遍历数组中的元素 num,统计满足 smallest} < \textit{num} < \textit{largest 的元素数目。最终,该数目即为数组中「同时具有一个严格较小元素和一个严格较大元素」的元素数量,我们返回该数目作为答案。

代码

[sol1-C++]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
int countElements(vector<int>& nums) {
int smallest = *min_element(nums.begin(), nums.end());
int largest = *max_element(nums.begin(), nums.end());
int res = 0;
for (int num: nums) {
if (smallest < num && num < largest) {
++res;
}
}
return res;
}
};
[sol1-Python3]
1
2
3
4
5
6
7
8
9
class Solution:
def countElements(self, nums: List[int]) -> int:
smallest = min(nums)
largest = max(nums)
res = 0
for num in nums:
if smallest < num < largest:
res += 1
return res

复杂度分析

  • 时间复杂度:O(n),其中 n 为 nums 的长度。其中求出数组最大值与最小值的时间复杂度为 O(n),计算符合要求元素数目的时间复杂度也为 O(n)。

  • 空间复杂度:O(1)。

 Comments
On this page
2148-元素计数