在数组中查找领导者

时间:2019-07-02 15:53:08

标签: java arrays

编写一个程序以打印阵列中的所有LEADERS。如果一个元素大于其右侧的所有元素,则为领导者。最右边的元素始终是领导者。例如,在数组{16,17,4,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

1 个答案:

答案 0 :(得分:-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));
        }

    }
}