📌  相关文章
📜  通过将对替换为总和来最大化数字数组中最多等于N的相等数字的计数

📅  最后修改于: 2021-04-23 18:20:23             🧑  作者: Mango

给定一个数组arr [],它包含从1N的自然数,任务是找到在执行以下操作后可以相等的最大元素数:

  1. 从数组中删除任何一对元素,并将它们的总和插入到数组中。
  2. 重复上述操作任意次,以最大程度地增加相等元素的数量。

例子:

方法:问题中的主要观察结果是:

  • 如果N是偶数,我们可以使相等元素的最大数量为

1+N=2+(N-1)=3+(N-2)=...

  • 如果N是奇数,我们可以使相等元素的最大数量为

N=1+(N-1)=2+(N-2)=...

因此,答案永远是

\lceil \frac{N}{2} \rceil

下面是上述方法的实现:

C++
// C++ implementation of
// the above approach
 
#include 
using namespace std;
 
// Function to count maximum number
// of array elements equal
int countEqual(int n)
{
    return (n + 1) / 2;
}
 
// Driver Code
int main()
{
    int arr[] = { 1, 2, 3, 4, 5, 6 };
 
    int n = sizeof(arr) / sizeof(arr[0]);
 
    // Function Call
    cout << countEqual(n);
    return 0;
}


Java
// Java implementation of
// the above approach
import java.io.*;
 
class GFG{
 
// Function to count maximum number
// of array elements equal
static int countEqual(int n)
{
    return (n + 1) / 2;
}
 
// Driver Code
public static void main (String[] args)
{
    int arr[] = { 1, 2, 3, 4, 5, 6 };
 
    int n = arr.length;
 
    // Function call
    System.out.println(countEqual(n));
}
}
 
// This code is contributed by AnkitRai01


Python3
# Python3 implementation of
# the above approach
 
# Function to count maximum number
# of array elements equal
def countEqual(n):
 
    return (n + 1) // 2
 
# Driver Code
lst = [ 1, 2, 3, 4, 5, 6 ]
n = len(lst)
 
# Function call
print(countEqual(n))
 
# This code is contributed by vishu2908


C#
// C# implementation of
// the above approach
using System;
class GFG{
 
// Function to count maximum number
// of array elements equal
static int countEqual(int n)
{
    return (n + 1) / 2;
}
 
// Driver Code
public static void Main(String[] args)
{
    int []arr = {1, 2, 3, 4, 5, 6};
    int n = arr.Length;
 
    // Function call
    Console.WriteLine(countEqual(n));
}
}
 
// This code is contributed by Rajput-Ji


输出:
3


性能分析:

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