给定一个整数N ,任务是找到一个长度为N的数组,该数组包含相同数量的奇数和偶数元素,并且数组中偶数和奇数元素的总和相等。
注意:如果没有这样的数组,则打印 -1。
例子:
Input: N = 4
Output: 1 2 5 4
Explanation:
Even elements of the array – {2, 4}, S(even) = 6
Odd elements of the array – {1, 5}, S(odd) = 6
Input: N = 6
Output: -1
Explanation:
There are no such array which contains 3 even elements and 3 odd elements with equal sum.
方法:问题中的关键观察是,只有长度为4的倍数的数组才能形成具有相等数量和相等的偶数和奇数元素的数组。下面是步骤的图示:
- 数组的偶数元素是从 2 开始的自然数的前N/2 个偶数元素。
- 类似地,(N / 2 – 1)所述阵列的奇数元素是第一(N / 2 – 1)从1开始自然数的奇数元素。
- 数组的最后一个奇数元素是使数组的偶数和奇数元素之和相等所需的值。
Last Odd Element = (sum of even elements) - (sum of N/2 - 1 odd elements)
下面是上述方法的实现:
C++
// C++ implementation to find the // array containing same count of // even and odd elements with equal // sum of even and odd elements #include
using namespace std; // Function to find the array such that // the array contains the same count // of even and odd elements with equal // sum of even and odd elements void findSolution(int N) { // Length of array which is not // divisible by 4 is unable to // form such array if (N % 4 != 0) cout << -1 << "\n"; else { int temp = 0, sum_odd = 0, sum_even = 0; int result[N] = { 0 }; // Loop to find the resulted // array containing the same // count of even and odd elements for (int i = 0; i < N; i += 2) { temp += 2; result[i + 1] = temp; // Find the total sum // of even elements sum_even += result[i + 1]; result[i] = temp - 1; // Find the total sum // of odd elements sum_odd += result[i]; } // Find the difference between the // total sum of even and odd elements int diff = sum_even - sum_odd; // The difference will be added // in the last odd element result[N - 2] += diff; for (int i = 0; i < N; i++) cout << result[i] << " "; cout << "\n"; } } // Driver Code int main() { int N = 8; findSolution(N); return 0; }
Java
// Java implementation to find the // array containing same count of // even and odd elements with equal // sum of even and odd elements class GFG{ // Function to find the array such that // the array contains the same count // of even and odd elements with equal // sum of even and odd elements static void findSolution(int N) { // Length of array which is not // divisible by 4 is unable to // form such array if (N % 4 != 0) System.out.print(-1 + "\n"); else { int temp = 0, sum_odd = 0; int sum_even = 0; int result[] = new int[N]; // Loop to find the resulted // array containing the same // count of even and odd elements for(int i = 0; i < N; i += 2) { temp += 2; result[i + 1] = temp; // Find the total sum // of even elements sum_even += result[i + 1]; result[i] = temp - 1; // Find the total sum // of odd elements sum_odd += result[i]; } // Find the difference between the // total sum of even and odd elements int diff = sum_even - sum_odd; // The difference will be added // in the last odd element result[N - 2] += diff; for(int i = 0; i < N; i++) System.out.print(result[i] + " "); System.out.print("\n"); } } // Driver Code public static void main(String[] args) { int N = 8; findSolution(N); } } // This code is contributed by Amit Katiyar
Python3
# Python3 implementation to find the # array containing same count of # even and odd elements with equal # sum of even and odd elements # Function to find the array such that # the array contains the same count # of even and odd elements with equal # sum of even and odd elements def findSolution(N): # Length of array which is not # divisible by 4 is unable to # form such array if (N % 4 != 0): print(-1) else: temp = 0 sum_odd = 0 sum_even = 0 result = [0] * N # Loop to find the resulted # array containing the same # count of even and odd elements for i in range(0, N, 2): temp += 2 result[i + 1] = temp # Find the total sum # of even elements sum_even += result[i + 1] result[i] = temp - 1 # Find the total sum # of odd elements sum_odd += result[i] # Find the difference between the # total sum of even and odd elements diff = sum_even - sum_odd # The difference will be added # in the last odd element result[N - 2] += diff for i in range(N): print(result[i], end = " ") print() # Driver Code N = 8; findSolution(N) # This code is contributed by divyamohan123
C#
// C# implementation to find the // array containing same count of // even and odd elements with equal // sum of even and odd elements using System; class GFG{ // Function to find the array such that // the array contains the same count // of even and odd elements with equal // sum of even and odd elements static void findSolution(int N) { // Length of array which is not // divisible by 4 is unable to // form such array if (N % 4 != 0) Console.Write(-1 + "\n"); else { int temp = 0, sum_odd = 0; int sum_even = 0; int []result = new int[N]; // Loop to find the resulted // array containing the same // count of even and odd elements for(int i = 0; i < N; i += 2) { temp += 2; result[i + 1] = temp; // Find the total sum // of even elements sum_even += result[i + 1]; result[i] = temp - 1; // Find the total sum // of odd elements sum_odd += result[i]; } // Find the difference between the // total sum of even and odd elements int diff = sum_even - sum_odd; // The difference will be added // in the last odd element result[N - 2] += diff; for(int i = 0; i < N; i++) Console.Write(result[i] + " "); Console.Write("\n"); } } // Driver Code public static void Main(String[] args) { int N = 8; findSolution(N); } } // This code is contributed by Rohit_ranjan
Javascript
输出:1 2 3 4 5 6 11 8
性能分析:
- 时间复杂度: O(N)
- 辅助空间: O(1)