解题思路
要使三个数的和为奇数,需要考虑奇偶性:
- 三个偶数相加 = 偶数
- 一个奇数两个偶数相加 = 奇数
- 两个奇数一个偶数相加 = 偶数
- 三个奇数相加 = 奇数
因此,只需要统计数组中奇数和偶数的个数,然后判断是否能选出和为奇数的三个数即可。
代码
#include <iostream>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<int> a(n);
int odd = 0, even = 0;
for(int i = 0; i < n; i++) {
cin >> a[i];
if(a[i] % 2) odd++;
else even++;
}
if((odd >= 1 && even >= 2) || odd >= 3) {
cout << "YES\n";
} else {
cout << "NO\n";
}
return 0;
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int odd = 0, even = 0;
for(int i = 0; i < n; i++) {
int x = sc.nextInt();
if(x % 2 == 1) odd++;
else even++;
}
if((odd >= 1 && even >= 2) || odd >= 3) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
n = int(input())
a = list(map(int, input().split()))
odd = sum(1 for x in a if x % 2)
even = n - odd
if (odd >= 1 and even >= 2) or odd >= 3:
print("YES")
else:
print("NO")
算法及复杂度
- 算法:计数统计。
- 时间复杂度:
,其中 n 为数组长度。
- 空间复杂度:
,只需要常数个变量。