编写一个程序来打印数组中的所有领导者。如果一个元素大于其右侧的所有元素,则该元素是领导者。最右边的元素始终是领导者。例如 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
不要在循环中打印这些内容,而是将它们添加到列表中,然后单独打印它们。 以下是您的代码中的更改。
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));
}
}
}
这是在数组中查找领导者领导者的单遍技术
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();}
以下是更多查找方法: