给定大小为N的圆形数组arr [] ,任务是检查是否可以通过将相邻元素对增加1来使圆形数组的所有数组元素相等。
例子:
Input: N = 4, arr[] = {2, 1, 3, 4}
Output:Yes
Explanation:
Step 1: {2, 1, 3, 4} -> {3, 2, 3, 4}
Step 2: {3, 2, 3, 4} -> {4, 3, 3, 4}
Step 3: {4, 3, 3, 4} -> {4, 4, 4, 4}
Input: N = 6, arr[]={1, 5, 9, 6, 1, 1}
Output: No
方法:为了解决该问题,可以观察到两个要增加元素的索引,一个是偶数,另一个是奇数。因此,如果我们增加偶数索引元素的值,结果奇数索引元素也将增加。因此,只有在奇数索引元素和偶数索引元素之和相等的情况下,才能使所有数组元素相等。请按照以下步骤解决问题:
- 计算所有偶数索引的数字之和,即sumEven 。
- 计算所有奇数索引数字的和,即sumOdd 。
- 如果发现sumEven和sumOdd相等,则打印“是”,否则打印“否”。
下面是上述方法的实现:
C++
// C++ Program to implement
// the above approach
#include
using namespace std;
// Function to check if all array
// elements can be made equal
bool checkEquall(int arr[], int N)
{
// Stores the sum of even and
// odd array elements
int sumEven = 0, sumOdd = 0;
for (int i = 0; i < N; i++) {
// If index is odd
if (i & 1)
sumOdd += arr[i];
else
sumEven += arr[i];
}
if (sumEven == sumOdd)
return true;
else
return false;
}
// Driver Code
int main()
{
int arr[] = { 2, 7, 3, 5, 7 };
int N = sizeof(arr) / sizeof(arr[0]);
if (checkEquall(arr, N))
cout << "YES" << endl;
else
cout << "NO" << endl;
return 0;
}
Java
// Java program to implement
// the above approach
import java.util.*;
class GFG{
// Function to check if all array
// elements can be made equal
static boolean checkEquall(int arr[], int N)
{
// Stores the sum of even and
// odd array elements
int sumEven = 0, sumOdd = 0;
for(int i = 0; i < N; i++)
{
// If index is odd
if (i % 2 == 1)
sumOdd += arr[i];
else
sumEven += arr[i];
}
if (sumEven == sumOdd)
return true;
else
return false;
}
// Driver Code
public static void main(String[] args)
{
int arr[] = { 2, 7, 3, 5, 7 };
int N = arr.length;
if (checkEquall(arr, N))
System.out.print("YES" + "\n");
else
System.out.print("NO" + "\n");
}
}
// This code is contributed by PrinciRaj1992
Python3
# Python3 program to implement
# the above approach
# Function to check if all array
# elements can be made equal
def checkEquall(arr, N):
# Stores the sum of even and
# odd array elements
sumEven, sumOdd = 0, 0
for i in range(N):
# If index is odd
if (i & 1):
sumOdd += arr[i]
else:
sumEven += arr[i]
if (sumEven == sumOdd):
return True
else:
return False
# Driver Code
if __name__ == "__main__":
arr = [ 2, 7, 3, 5, 7 ]
N = len(arr)
if (checkEquall(arr, N)):
print("YES")
else:
print("NO")
# This code is contributed by chitranayal
C#
// C# program to implement
// the above approach
using System;
class GFG{
// Function to check if all array
// elements can be made equal
static bool checkEquall(int []arr, int N)
{
// Stores the sum of even and
// odd array elements
int sumEven = 0, sumOdd = 0;
for(int i = 0; i < N; i++)
{
// If index is odd
if (i % 2 == 1)
sumOdd += arr[i];
else
sumEven += arr[i];
}
if (sumEven == sumOdd)
return true;
else
return false;
}
// Driver Code
public static void Main(String[] args)
{
int []arr = { 2, 7, 3, 5, 7 };
int N = arr.Length;
if (checkEquall(arr, N))
Console.Write("YES" + "\n");
else
Console.Write("NO" + "\n");
}
}
// This code is contributed by PrinciRaj1992
输出:
YES
时间复杂度: O(N)
辅助空间: O(1)