使用另一个数组最大化元素的Java程序
给定两个大小为 n 的数组,通过使用第二个数组中的元素来最大化第一个数组,使得形成的新数组包含两个数组的 n 个最大但唯一的元素,从而赋予第二个数组优先级(第二个数组的所有元素出现在第一个数组之前)。元素的出现顺序在输出中与输入中保持相同。
例子:
Input : arr1[] = {2, 4, 3}
arr2[] = {5, 6, 1}
Output : 5 6 4
As 5, 6 and 4 are maximum elements from two arrays giving second array higher priority. Order of elements is same in output as in input.
Input : arr1[] = {7, 4, 8, 0, 1}
arr2[] = {9, 7, 2, 3, 6}
Output : 9 7 6 4 8
方法:我们创建一个大小为 2*n 的辅助数组,并将第 2 个数组的元素存储在辅助数组中,然后我们将第 1 个数组的元素存储在其中。之后,我们将按降序对辅助数组进行排序。为了根据输入数组保持元素的顺序,我们将使用哈希表。我们将在哈希表中存储辅助数组的第 1 n 个最大唯一元素。现在我们遍历第二个数组并将第二个数组的元素存储在哈希表中存在的辅助数组中。同样,我们将遍历第一个数组并存储哈希表中存在的元素。通过这种方式,我们从辅助数组中的两个数组中获得 n 个唯一且最大的元素,同时保持元素的出现顺序相同。
以下是上述方法的实现:
Java
// Java program to print the maximum elements
// giving second array higher priority
import java.util.*;
class GFG
{
// Function to maximize array elements
static void maximizeArray(int[] arr1,int[] arr2)
{
// auxiliary array arr3 to store
// elements of arr1 & arr2
int arr3[] = new int[10];
for(int i = 0; i < arr3.length; i++)
{
//arr2 has high priority
arr3[i] = 0;
}
// Arraylist to store n largest
// unique elements
ArrayList al = new ArrayList();
for(int i = 0; i < arr2.length; i++)
{
if(arr3[arr2[i]] == 0)
{
// to avoid repetition of digits of arr2 in arr3
arr3[arr2[i]] = 2;
// simultaneously setting arraylist to
// preserve order of arr2 and arr3
al.add(arr2[i]);
}
}
for(int i = 0; i < arr1.length; i++)
{
if(arr3[arr1[i]] == 0)
{
// if digit is already present in arr2
// then priority is arr2
arr3[arr1[i]] = 1;
// simultaneously setting arraylist to
// preserve order of arr1
al.add(arr1[i]);
}
}
// to get only highest n elements(arr2+arr1)
// and remove others from arraylist
int count = 0;
for(int j = 9; j >= 0; j--)
{
if(count < arr1.length &
(arr3[j] == 2 || arr3[j] == 1))
{
// to not allow those elements
// which are absent in both arrays
count++;
}
else
{
al.remove(Integer.valueOf(j));
}
}
int i = 0;
for(int x:al)
{
arr1[i++] = x;
}
}
// Function to print array elements
static void printArray(int[] arr)
{
for(int x:arr)
{
System.out.print(x + " ");
}
}
// Driver Code
public static void main(String args[])
{
int arr1[] = {7, 4, 8, 0, 1};
int arr2[] = {9, 7, 2, 3, 6};
maximizeArray(arr1,arr2);
printArray(arr1);
}
}
// This code is contributed by KhwajaBilkhis
9 7 6 4 8
时间复杂度:O(n * log n)。
有关更多详细信息,请参阅有关使用另一个数组最大化元素的完整文章!