📌  相关文章
📜  甚至通过用它们的和替换相邻的一对数组元素来制作所有数组元素

📅  最后修改于: 2021-04-25 00:30:24             🧑  作者: Mango

给定大小为N的数组arr [] ,任务是即使将一对相邻元素替换为它们的总和,也可以制作所有数组元素。

例子:

方法:这个想法是利用两个奇数之和产生一个偶数这一事实。请按照以下步骤解决问题:

  1. 初始化两个整数,例如res ,以计算替换的次数,并初始化odd_continuous_segment ,以计算连续的奇数的数目
  2. 遍历数组,并检查每个数组元素的以下条件:
    1. 如果arr [i]为奇数,则将奇数连续段的计数增加1
    2. 否则,如果odd_continuous_segment为奇数,则将res增加odd_continuous_segment / 2 。否则,将res增加odd_continuous_segment / 2 + 2并将奇数_continuous_segment分配给0
  3. 检查odd_continuous_segment是否为奇数。如果发现为真,则将res增加奇数/连续_段/ 2 。否则,将res增加(odd_continuous_segment / 2 + 2)
  4. 最后,打印获得的res

下面是上述方法的实现:

C++
// C++ program to implement
// the above approach
 
#include 
using namespace std;
 
// Function to find minimum count of operations
// required to make all array elements even
int make_array_element_even(int arr[], int N)
{
    // Stores minimum count of replacements
    // to make all array elements even
    int res = 0;
 
    // Stores the count of odd
    // continuous numbers
    int odd_cont_seg = 0;
 
    // Traverse the array
    for (int i = 0; i < N; i++) {
 
        // If arr[i] is an odd number
        if (arr[i] % 2 == 1) {
 
            // Update odd_cont_seg
            odd_cont_seg++;
        }
        else {
 
            if (odd_cont_seg > 0) {
 
                // If odd_cont_seg is even
                if (odd_cont_seg % 2 == 0) {
 
                    // Update res
                    res += odd_cont_seg / 2;
                }
 
                else {
 
                    // Update res
                    res += (odd_cont_seg / 2) + 2;
                }
 
                // Reset odd_cont_seg = 0
                odd_cont_seg = 0;
            }
        }
    }
 
    // If odd_cont_seg exceeds 0
    if (odd_cont_seg > 0) {
 
        // If odd_cont_seg is even
        if (odd_cont_seg % 2 == 0) {
 
            // Update res
            res += odd_cont_seg / 2;
        }
 
        else {
 
            // Update res
            res += odd_cont_seg / 2 + 2;
        }
    }
 
    // Print the result
    return res;
}
 
// Drivers Code
int main()
{
    int arr[] = { 2, 4, 5, 11, 6 };
    int N = sizeof(arr) / sizeof(arr[0]);
    cout << make_array_element_even(arr, N);
 
    return 0;
}


Java
// Java program to implement
// the above approach
import java.util.*;
class GFG{
 
  // Function to find minimum count of operations
  // required to make all array elements even
  static int make_array_element_even(int arr[], int N)
  {
 
    // Stores minimum count of replacements
    // to make all array elements even
    int res = 0;
 
    // Stores the count of odd
    // continuous numbers
    int odd_cont_seg = 0;
 
    // Traverse the array
    for (int i = 0; i < N; i++)
    {
 
      // If arr[i] is an odd number
      if (arr[i] % 2 == 1)
      {
 
        // Update odd_cont_seg
        odd_cont_seg++;
      }
      else
      {
        if (odd_cont_seg > 0)
        {
 
          // If odd_cont_seg is even
          if (odd_cont_seg % 2 == 0)
          {
 
            // Update res
            res += odd_cont_seg / 2;
          }
 
          else
          {
 
            // Update res
            res += (odd_cont_seg / 2) + 2;
          }
 
          // Reset odd_cont_seg = 0
          odd_cont_seg = 0;
        }
      }
    }
 
    // If odd_cont_seg exceeds 0
    if (odd_cont_seg > 0)
    {
 
      // If odd_cont_seg is even
      if (odd_cont_seg % 2 == 0)
      {
 
        // Update res
        res += odd_cont_seg / 2;
      }
 
      else
      {
 
        // Update res
        res += odd_cont_seg / 2 + 2;
      }
    }
 
    // Print the result
    return res;
  }
 
  // Drivers Code
  public static void main(String[] args)
  {
    int arr[] = { 2, 4, 5, 11, 6 };
    int N = arr.length;
    System.out.print(make_array_element_even(arr, N));
  }
}
 
// This code is contributed by shikhasingrajput


Python3
# Python program for the above approach
 
# Function to find minimum count of operations
# required to make all array elements even
def make_array_element_even(arr, N):
     
    # Stores minimum count of replacements
    # to make all array elements even
    res = 0
     
    # Stores the count of odd
    # continuous numbers
    odd_cont_seg = 0
     
    # Traverse the array
    for i in range(0, N):
         
        # If arr[i] is an odd number
        if (arr[i] % 2 == 1):
           
            # Update odd_cont_seg
            odd_cont_seg+=1
        else:
            if (odd_cont_seg > 0):
               
                # If odd_cont_seg is even
                if (odd_cont_seg % 2 == 0):
                   
                    # Update res
                    res += odd_cont_seg // 2
                 
                else:
                   
                    # Update res
                    res += (odd_cont_seg // 2) + 2
                 
                # Reset odd_cont_seg = 0
                odd_cont_seg = 0
     
    # If odd_cont_seg exceeds 0
    if (odd_cont_seg > 0):
         
        # If odd_cont_seg is even
        if (odd_cont_seg % 2 == 0):
             
            # Update res
            res += odd_cont_seg // 2
         
        else:
             
            # Update res
            res += odd_cont_seg // 2 + 2
             
    # Prthe result
    return res
 
# Drivers Code
arr =  [2, 4, 5, 11, 6]
N = len(arr)
print(make_array_element_even(arr, N))
 
# This code is contributed by shubhamsingh10


C#
// C# program to implement
// the above approach
using System;
public class GFG
{
 
  // Function to find minimum count of operations
  // required to make all array elements even
  static int make_array_element_even(int []arr, int N)
  {
 
    // Stores minimum count of replacements
    // to make all array elements even
    int res = 0;
 
    // Stores the count of odd
    // continuous numbers
    int odd_cont_seg = 0;
 
    // Traverse the array
    for (int i = 0; i < N; i++)
    {
 
      // If arr[i] is an odd number
      if (arr[i] % 2 == 1)
      {
 
        // Update odd_cont_seg
        odd_cont_seg++;
      }
      else
      {
        if (odd_cont_seg > 0)
        {
 
          // If odd_cont_seg is even
          if (odd_cont_seg % 2 == 0)
          {
 
            // Update res
            res += odd_cont_seg / 2;
          }
 
          else
          {
 
            // Update res
            res += (odd_cont_seg / 2) + 2;
          }
 
          // Reset odd_cont_seg = 0
          odd_cont_seg = 0;
        }
      }
    }
 
    // If odd_cont_seg exceeds 0
    if (odd_cont_seg > 0)
    {
 
      // If odd_cont_seg is even
      if (odd_cont_seg % 2 == 0)
      {
 
        // Update res
        res += odd_cont_seg / 2;
      }
 
      else
      {
 
        // Update res
        res += odd_cont_seg / 2 + 2;
      }
    }
 
    // Print the result
    return res;
  }
 
  // Drivers Code
  public static void Main(String[] args)
  {
    int []arr = { 2, 4, 5, 11, 6 };
    int N = arr.Length;
    Console.Write(make_array_element_even(arr, N));
  }
}
 
// This code is contributed by 29AjayKumar


输出:
1

时间复杂度: O(N)
辅助空间: O(1)