在数组中查找领导者

问题描述 投票:0回答:2

编写一个程序来打印数组中的所有领导者。如果一个元素大于其右侧的所有元素,则该元素是领导者。最右边的元素始终是领导者。例如 int 数组 {16, 17, 4, 3, 5, 2},前导数为 17, 5 和 2。 令输入数组为 arr[],数组大小为 size。

o/p 我得到的是 2 5 17

注意:我想要 O/P 按相反的顺序,并且一个在另一个下面(换行符)。

class LeadersInArray  
{ 
    /* Java Function to print leaders in an array */
    void printLeaders(int arr[], int size) 
    { 
        int max_from_right =  arr[size-1]; 

        /* Rightmost element is always leader */
        System.out.print(max_from_right + " "); 

        for (int i = size-2; i >= 0; i--) 
        { 
            if (max_from_right < arr[i]) 
            {            
            max_from_right = arr[i]; 
            System.out.print(max_from_right + " "); 
            } 
        }     
    } 

    public static void main(String[] args)  
    { 
        LeadersInArray lead = new LeadersInArray(); 
        int arr[] = new int[]{16, 17, 4, 3, 5, 2}; 
        int n = arr.length; 
        lead.printLeaders(arr, n); 
    } 
} 

预期输出:

   17
   5
   2
java arrays
2个回答
-1
投票

不要在循环中打印这些内容,而是将它们添加到列表中,然后单独打印它们。 以下是您的代码中的更改。

class LeadersInArray {
    List<Integer> printLeaders(int[] arr, int size) {
        List<Integer> list = new ArrayList<>();

        int max_from_right = arr[size - 1];

        list.add(max_from_right);


        for (int i = size - 1; i >= 0; i--) {
            if (max_from_right < arr[i]) {
                max_from_right = arr[i];
                list.add(max_from_right);
            }
        }
        return list;
    }

    public static void main(String[] args) {
        LeadersInArray lead = new LeadersInArray();
        int arr[] = new int[]{16, 17, 4, 3, 5, 2};
        List<Integer> integers = lead.printLeaders(arr, arr.length);
        for(int i = integers.size()-1; i>=0 ;i--){
            System.out.println(integers.get(i));
        }

    }
} 

-1
投票

这是在数组中查找领导者领导者的单遍技术

function findLeaders(arr) {
if (!Array.isArray(arr) || arr.length === 0) {
    throw new Error('Input must be a non-empty array');
}

const leaders = [];
let maxFromRight = arr[arr.length - 1];
leaders.push(maxFromRight);

for (let i = arr.length - 2; i >= 0; i--) {
    if (arr[i] > maxFromRight) {
        maxFromRight = arr[i];
        leaders.push(maxFromRight);
    }
}

return leaders.reverse();} 

以下是更多查找方法:

https://amanpareek.in/array/leaders-in-an-array.html

© www.soinside.com 2019 - 2024. All rights reserved.