@Chekistchek

Какой алгоритм эффективней?

Нужно найти сумму элементов между первым и вторым положительными элементами, я сделал двумя способами. Что эффективнее?(Массив может быть любой длины, я взял 8 элементов)
int arr[] = {1,-5,-6,3,-85, -4, -9,-7};
    int interval_sum = 0;
    bool is_has_len = false;
    
    int i = 0;
    while(arr[i++]<=0 && i < 8); // находим номер первого отрицательного после положительного
    
    while(arr[i]<=0 && i < 8) { // суммируем
        interval_sum += arr[i++];
        is_has_len = true;
    }

    if (!is_has_len) {
        cout << "interval is null, we can not count a sum" << endl;
    } else if (i == 8) {
        cout << "Less than two 'plus' numbers, we can not count a sum" << endl; 
    } else {
        cout << "sum is " << interval_sum << endl;
    }


int arr[] = {-1,-5,-6,3,-85, 4, 9,7};
    int interval_sum = 0;
    bool is_count = false;
    bool is_was_interval = false;
    bool is_has_len = false;
    
    for (int i = 0; i < 8; i++){
        /* подсчет суммы элементов между первыми двумя положительными*/
        if (!is_was_interval) {// если еще не было интервала
            if (arr[i]>0 && is_count){ //если мы уже считаем и нам попалось положительное, то останавливаем счет
                is_was_interval = true;
            } else {
            
                if (is_count) {
                    interval_sum += arr[i];
                    is_has_len = true;
                }
               
                if (arr[i]>0 && !is_count){// если положительное и не считали, то начинаем
                    is_count = true;
                }
            }
        }
    }

    
    if (!is_has_len) {
        cout << "interval is null, we can not count a sum" << endl;
    } else if (!is_was_interval) {
        cout << "Less than two 'plus' numbers, we can not count a sum" << endl; 
    } else {
        cout << "sum is " << interval_sum << endl;
    }

На первый взгляд эффективнее первый алгоритм из-за меньшего "объема", но там происходит двойная итерация массива.
Буду благодарен, если вы предложите более правильное решение.
  • Вопрос задан
  • 175 просмотров
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Вариант 1 и там - одинарная неполная (в большинстве случаев) итерация массива.
Во 2-м варианте - перебор с проверками, что значительно будет медленнее...
Ответ написан
Комментировать
@Leevz
Запусти последовательно обе и по времени определи лучшую
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы