Постановка задачи –
Дан массив A целых положительных чисел. Ваша задача — найти лидеров в массиве. Элемент массива является лидером, если он больше или равен всем элементам справа от него. Самый правый элемент всегда является лидером.
Решение: -
Просто пройдите по массиву с правой стороны.
Создайте переменную mx и инициализируйте ее с помощью [n-1].
mx=a[n-1]
Создайте новый вектор ответа и поместите эту переменную mx в вектор ответа.
vector<int>ans; ans.push_back(mx);
Теперь нам нужно проверить каждый элемент, больший или равный текущей переменной mx.
Если текущий элемент меньше переменной mx, пропустите этот элемент и продолжим с этого момента.
for(int i=n-2; i>=0; i--){ if(a[i]<mx) continue; }
Теперь нам нужно добавить условие для элемента, который больше или равен текущему mx.
Если текущий элемент больше или равен mx, обновите переменную mx и вставьте этот элемент в вектор.
for(int i=n-2; i>=0; i--){ if(a[i]<mx) continue; mx=a[i]; ans.push_back(mx); }
Теперь, наконец, нам нужно перевернуть массив, потому что нам нужно вернуть массив слева направо, а наш вектор ответа имеет обход справа налево.
reverse(ans.begin(), ans.end());
Вот полная реализация -
class Solution{ public: vector<int> leaders(int a[], int n){ int mx=a[n-1]; vector<int>ans; ans.push_back(mx); for(int i=n-2; i>=0; i--){ if(a[i]<mx) continue; mx=a[i]; ans.push_back(mx); } reverse(ans.begin(), ans.end()); return ans; } };