Считается ли мое решение эффективным по времени? Понимаю, что по памяти оно неэффективно, т.к используются структуры данных\контейнеры, а вот по времени не знаю как определить.
Условие задачи:
С4
По каналу связи передаются положительные целые числа, не превышающие 1000. После окончания передаётся контрольное значение – наибольшее число R, удовлетворяющее следующим условиям:
1) R — сумма двух различных переданных элементов последовательности.
2) R — нечётное число.
Напишите программу для решения поставленной задачи, которая будет эффективна как по времени, так и по памяти (или хотя бы по одной из этих характеристик).
Программа считается эффективной по времени, если время работы программы пропорционально количеству элементов последовательности N, т.е. при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз.
#include <iostream>
#include <vector>
#include <conio.h>
#include <algorithm>
int main()
{
std::vector<int> vec;
std::vector<int>::size_type count;
std::cin >> count;
for (std::vector<int>::size_type i = 0; i < count; i++) {
std::vector<int>::size_type current;
std::cin >> current;
vec.push_back(current);
}
std::sort(vec.begin(), vec.end());
std::vector<int>::size_type maximum = 0;
std::vector<int>::size_type left = vec.size() - 2;
std::vector<int>::size_type right = vec.size() - 1;
for ( std::vector<int>::size_type i = 0; ++i < vec.size(); )
{
std::vector<int>::size_type summary = vec[left] + vec[right];
if ((maximum < summary) && (summary & 1 != 0))
{
maximum = summary;
left--;
}
else {
if ((summary & 1) == 0) {
left--;
}
else {
right--;
}
}
}
if (maximum) {
std::cout << "\nFound: " << maximum;
}
else {
std::cout << "\nNot found";
}
_getch();
}
После того, как вы вектор отсортировали, нет нужды в переборе. Вы должны взять наибольшее нечетное число плюс наибольшее четное. Сумма нечетная может быть, если одно число четное, а другое нечетное. Если нечетных нет, то и ответа нет. Не делайте сорт, который занимает nlog n, а просто ищите максимальное четное и нечетное за время n. Да, и хранить все данные в векторе не понадобится.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости