📌  相关文章
📜  Java程序以原始顺序查找数组的k个最大元素

📅  最后修改于: 2022-05-13 01:54:57.965000             🧑  作者: Mango

Java程序以原始顺序查找数组的k个最大元素

给定一个数组 arr[] 和一个整数 k,我们需要打印给定数组的 k 个最大元素。元素应按输入的顺序打印。
注意: k 总是小于或等于 n。

例子:

Input : arr[] = {10 50 30 60 15}
        k = 2
Output : 50 60
The top 2 elements are printed
as per their appearance in original
array.

Input : arr[] = {50 8 45 12 25 40 84}
            k = 3
Output : 50 45 84

方法1:我们在给定数组中搜索最大元素k次。每次我们找到一个最大元素时,我们打印它并用数组中的负无穷大(C 中的 INT_MIN)替换它。该方法的时间复杂度为 O(n*k)。

方法2:在这个方法中,我们将原始数组存储在一个新数组中,并按降序对新数组进行排序。排序后,我们将原始数组从 0 迭代到 n 并打印所有出现在新数组的前 k 个元素中的元素。对于搜索,我们可以进行二分搜索。

Java
// Java program to find k maximum  
// elements of array in original order
import java.util.Arrays;
import java.util.Collections;
  
public class GfG {
      
    // Function to print m Maximum elements
    public static void printMax(int arr[], int k, int n)
    {
        // Array to store the copy 
        // of the original array
        Integer[] brr = new Integer[n];
          
        for (int i = 0; i < n; i++)
        brr[i] = arr[i];
          
        // Sorting the array in 
        // descending order
        Arrays.sort(brr, Collections.reverseOrder());
      
        // Traversing through original array and
        // printing all those elements that are
        // in first k of sorted array.
        // Please refer https://goo.gl/uj5RCD
        // for details of Arrays.binarySearch()
        for (int i = 0; i < n; ++i)
            if (Arrays.binarySearch(brr, arr[i], 
                    Collections.reverseOrder()) >= 0
                 && Arrays.binarySearch(brr, arr[i], 
                    Collections.reverseOrder()) < k)
                      
                System.out.print(arr[i]+ " ");
    }
  
    // Driver code
    public static void main(String args[])
    {
        int arr[] = { 50, 8, 45, 12, 25, 40, 84 };
        int n = arr.length;
        int k = 3;
        printMax(arr, k, n);
    }
}
  
// This code is contributed by Swetank Modi


输出:

50 45 84 

时间复杂度:O(n Log n) 用于排序。
辅助空间:O(n)

有关详细信息,请参阅有关按原始顺序查找数组的 k 个最大元素的完整文章!