给定一个数组arr[] ,任务是检查是否有可能使数组之和为奇数,以便可以选择任意两个索引i和j并且可以将arr[i]设置为等于arr[j]给定我 != j 。
例子:
Input: arr[] = { 5, 4, 4, 5, 1, 3 }
Output: Yes
Explanation:
The sum of the array is 22. Put arr[0] = arr[1] where i=0 and j=1. The sum of this new array is 21 which is odd.
Input: arr[] = { 2, 2, 8, 8 }
Output: No
Explanation:
Sum of the array is 20.
The sum of the array cannot change to odd as all the elements are even. Adding even number to an even number always gives an even result.
方法:这个想法是找到数组中所有元素的总和,同时检查数组中存在的偶数和奇数的数量。如果总和为偶数,则可以用奇数替换偶数之一,从而使数组的总和为奇数。如果数组中没有奇数元素,则数组的总和不能为奇数。
下面是上述方法的实现:
C++
// C++ program to check if the array
// with odd sum is possible
#include
using namespace std;
// Function to check if the
// sum of the array can be made odd.
bool isOdd(int arr[], int n)
{
int l, r, flag = 0, flag1 = 0, sum = 0;
// Find sum of all elements and increment
// check for odd or even elements in the array
// so that by changing ai=aj,
// the sum of the array can be made odd
for (int i = 0; i < n; i++) {
sum += arr[i];
if (arr[i] % 2 == 0 && flag == 0) {
flag = 1;
l = arr[i];
}
if (arr[i] % 2 != 0 && flag1 == 0) {
r = arr[i];
flag1 = 1;
}
}
// If the sum is already odd
if (sum % 2 != 0) {
return true;
}
// Else, then both the flags should be checked.
// Here, flag1 and flag represent if there is
// an odd-even pair which can be replaced.
else {
if (flag1 == 1 && flag == 1)
return true;
else
return false;
}
}
// Driver code
int main()
{
int ar[] = { 5, 4, 4, 5, 1, 3 };
int n = sizeof(ar) / sizeof(ar[0]);
bool res = isOdd(ar, n);
if (res)
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}
Java
// Java program to check if the array
// with odd sum is possible
class GFG {
// Function to check if the
// sum of the array can be made odd.
static boolean isOdd(int []arr, int n)
{
int l, r, flag = 0, flag1 = 0, sum = 0;
// Find sum of all elements and increment
// check for odd or even elements in the array
// so that by changing ai=aj,
// the sum of the array can be made odd
for (int i = 0; i < n; i++) {
sum += arr[i];
if (arr[i] % 2 == 0 && flag == 0) {
flag = 1;
l = arr[i];
}
if (arr[i] % 2 != 0 && flag1 == 0) {
r = arr[i];
flag1 = 1;
}
}
// If the sum is already odd
if (sum % 2 != 0) {
return true;
}
// Else, then both the flags should be checked.
// Here, flag1 and flag represent if there is
// an odd-even pair which can be replaced.
else {
if (flag1 == 1 && flag == 1)
return true;
else
return false;
}
}
// Driver code
public static void main (String[] args)
{
int ar[] = { 5, 4, 4, 5, 1, 3 };
int n = ar.length;
boolean res = isOdd(ar, n);
if (res == true)
System.out.println("Yes");
else
System.out.println("No");
}
}
// This code is contributed by AnkitRai01
Python3
# Python3 program to check if the array
# with odd sum is possible
# Function to check if the
# sum of the array can be made odd.
def isOdd(arr, n) :
flag = 0; flag1 = 0; sum = 0;
# Find sum of all elements and increment
# check for odd or even elements in the array
# so that by changing ai=aj,
# the sum of the array can be made odd
for i in range(n) :
sum += arr[i];
if (arr[i] % 2 == 0 and flag == 0) :
flag = 1;
l = arr[i];
if (arr[i] % 2 != 0 and flag1 == 0) :
r = arr[i];
flag1 = 1;
# If the sum is already odd
if (sum % 2 != 0) :
return True;
# Else, then both the flags should be checked.
# Here, flag1 and flag represent if there is
# an odd-even pair which can be replaced.
else :
if (flag1 == 1 and flag == 1) :
return True;
else :
return False;
# Driver code
if __name__ == "__main__" :
arr = [ 5, 4, 4, 5, 1, 3 ];
n = len(arr);
res = isOdd(arr, n);
if (res) :
print("Yes");
else :
print("No");
# This code is contributed by AnkitRai01
C#
// C# program to check if the array
// with odd sum is possible
using System;
class GFG{
// Function to check if the
// sum of the array can be made odd.
static bool isOdd(int[] arr, int n)
{
int flag = 0, flag1 = 0, sum = 0;
// Find sum of all elements and increment
// check for odd or even elements in the array
// so that by changing ai=aj,
// the sum of the array can be made odd
for (int i = 0; i < n; i++) {
sum += arr[i];
if (arr[i] % 2 == 0 && flag == 0) {
flag = 1;
}
if (arr[i] % 2 != 0 && flag1 == 0) {
flag1 = 1;
}
}
// If the sum is already odd
if (sum % 2 != 0) {
return true;
}
// Else, then both the flags should be checked.
// Here, flag1 and flag represent if there is
// an odd-even pair which can be replaced.
else {
if (flag1 == 1 && flag == 1)
return true;
else
return false;
}
}
// Driver code
static public void Main ()
{
int[] ar = { 5, 4, 4, 5, 1, 3 };
int n = ar.Length;
bool res = isOdd(ar, n);
if (res)
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
// This code is contributed by shivanisingh
Javascript
输出:
Yes
时间复杂度: O(N)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live