📌  相关文章
📜  构造数组,其中给定数组中相同索引元素的乘积之和为零

📅  最后修改于: 2021-10-26 02:38:40             🧑  作者: Mango

给定一个大小为N (总是偶数)的数组arr[] ,任务是构造一个由N个非零整数组成的新数组,使得arr[]的相同索引元素与新数组的乘积之和等于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)