题目要求我们从数组中找出满足两个条件的“完美偶数”,其中条件如下:
- 数字是偶数。
- 数字位于给定区间
[l, r]内。
解题思路
我们可以通过以下步骤来解决这个问题:
- 检查偶数:首先,对于每个数字,判断它是否是偶数。偶数的判断条件是
x % 2 == 0。 - 检查区间:其次,判断该数字是否在给定的区间
[l, r]内,即满足l <= x <= r。 - 计数符合条件的完美偶数:对于数组中的每个元素,如果它满足上述两个条件,就将计数器加 1。
代码实现
我们可以通过简单的遍历数组来检查每个数字是否符合条件。为了实现这一点,定义一个计数器 count,对于每个数字,我们进行偶数和区间检查,并在符合条件时增加计数器。
代码如下:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int solution(int n, int l, int r, std::vector<int>& a) {
int count = 0;
// 遍历数组中的每个数字
for (int i = 0; i < n; ++i) {
// 检查是否是偶数并且在[l, r]区间内
if (a[i] % 2 == 0 && a[i] >= l && a[i] <= r) {
count++; // 满足条件,计数增加
}
}
return count;
}
int main() {
vector<int> a1 = {1, 2, 6, 8, 7};
cout << (solution(5, 3, 8, a1) == 2) << endl;
vector<int> a2 = {12, 15, 18, 9};
cout << (solution(4, 10, 20, a2) == 2) << endl;
vector<int> a3 = {2, 4, 6};
cout << (solution(3, 1, 10, a3) == 3) << endl;
}
时间复杂度
- 时间复杂度:
O(n),其中n是数组的长度。我们只遍历了一遍数组,且每个元素的检查操作是常数时间操作。 - 空间复杂度:
O(1),我们只用了常数的额外空间,除去输入的数组。