给定一个大小为N (总是偶数)的数组arr[] ,任务是构造一个由N个非零整数组成的新数组,使得arr[]的相同索引元素与新数组的乘积之和等于0 。如果存在多个解决方案,请打印其中任何一个。
例子:
Input: arr[] = {1, 2, 3, 4}
Output: -4 -3 2 1
Explanation:
Sum of product of same indexed array elements of arr[] with the new array = {1 * (-4) + 2 * (-3) + 3 * (2) + 4 * (1)} = 0.
Therefore, the required output is -4 -3 2 1.
Input: arr[] = {-1, 2, -3, 6, 4}
Output: 1 1 1 1 -1
方法:该问题可以使用贪心技术解决。该想法基于以下观察:
arr[i] * (-arr[i + 1]) + arr[i + 1] * arr[i] = 0
请按照以下步骤解决问题:
- 初始化一个数组,比如newArr[]来存储新的数组元素,使得Σ(arr[i] * newArr[i]) = 0
- 使用变量i遍历给定数组并检查 i 是否为偶数。如果发现为真,则newArr[i] = arr[i + 1] 。
- 否则, newArr[i] = -arr[i – 1]
- 最后,打印newArr[]的值。
下面是上述方法的实现
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to generate a new array with product
// of same indexed elements with arr[] equal to 0
void constructNewArraySumZero(int arr[], int N)
{
// Stores sum of same indexed array
// elements of arr and new array
int newArr[N];
// Traverse the array
for (int i = 0; i < N; i++) {
// If i is an even number
if (i % 2 == 0) {
// Insert arr[i + 1] into
// the new array newArr[]
newArr[i] = arr[i + 1];
}
else {
// Insert -arr[i - 1] into
// the new array newArr[]
newArr[i] = -arr[i - 1];
}
}
// Print new array elements
for (int i = 0; i < N; i++) {
cout << newArr[i] << " ";
}
}
// Driver Code
int main()
{
int arr[] = { 1, 2, 3, -5, -6, 8 };
int N = sizeof(arr) / sizeof(arr[0]);
constructNewArraySumZero(arr, N);
return 0;
}
Java
// Java program to implement
// the above approach
import java.util.*;
class GFG{
// Function to generate a new array with
// product of same indexed elements with
// arr[] equal to 0
static void constructNewArraySumZero(int arr[],
int N)
{
// Stores sum of same indexed array
// elements of arr and new array
int newArr[] = new int[N];
// Traverse the array
for(int i = 0; i < N; i++)
{
// If i is an even number
if (i % 2 == 0)
{
// Insert arr[i + 1] into
// the new array newArr[]
newArr[i] = arr[i + 1];
}
else
{
// Insert -arr[i - 1] into
// the new array newArr[]
newArr[i] = -arr[i - 1];
}
}
// Print new array elements
for(int i = 0; i < N; i++)
{
System.out.print(newArr[i] + " ");
}
}
// Driver Code
public static void main(String[] args)
{
int arr[] = { 1, 2, 3, -5, -6, 8 };
int N = arr.length;
constructNewArraySumZero(arr, N);
}
}
// This code is contributed by susmitakundugoaldanga
Python3
# Python3 program to implement
# the above approach
# Function to generate a new array
# with product of same indexed elements
# with arr[] equal to 0
def constructNewArraySumZero(arr, N):
# Stores sum of same indexed array
# elements of arr and new array
newArr = [0] * N
# Traverse the array
for i in range(N):
# If i is an even number
if (i % 2 == 0):
# Insert arr[i + 1] into
# the new array newArr[]
newArr[i] = arr[i + 1]
else:
# Insert -arr[i - 1] into
# the new array newArr[]
newArr[i] = -arr[i - 1]
# Print new array elements
for i in range(N):
print(newArr[i] ,
end = " ")
# Driver code
arr = [1, 2, 3, -5, -6, 8]
N = len(arr)
constructNewArraySumZero(arr, N)
# This code is contributed by divyeshrabadiya07
C#
// C# program to implement
// the above approach
using System;
class GFG{
// Function to generate a new array with
// product of same indexed elements with
// arr[] equal to 0
static void constructNewArraySumZero(int[] arr,
int N)
{
// Stores sum of same indexed array
// elements of arr and new array
int[] newArr = new int[N];
// Traverse the array
for(int i = 0; i < N; i++)
{
// If i is an even number
if (i % 2 == 0)
{
// Insert arr[i + 1] into
// the new array newArr[]
newArr[i] = arr[i + 1];
}
else
{
// Insert -arr[i - 1] into
// the new array newArr[]
newArr[i] = -arr[i - 1];
}
}
// Print new array elements
for(int i = 0; i < N; i++)
{
Console.Write(newArr[i] + " ");
}
}
// Driver Code
public static void Main()
{
int[] arr = { 1, 2, 3, -5, -6, 8 };
int N = arr.Length;
constructNewArraySumZero(arr, N);
}
}
// This code is contributed by code_hunt
Javascript
输出
2 -1 -5 -3 8 6
时间复杂度: O(N)
辅助空间: O(N)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live