解题思路

要使三个数的和为奇数,需要考虑奇偶性:

  1. 三个偶数相加 = 偶数
  2. 一个奇数两个偶数相加 = 奇数
  3. 两个奇数一个偶数相加 = 偶数
  4. 三个奇数相加 = 奇数

因此,只需要统计数组中奇数和偶数的个数,然后判断是否能选出和为奇数的三个数即可。

代码

#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 为数组长度。
  • 空间复杂度: ,只需要常数个变量。