@IndusDev

Как реализовать этот код лучшим образом?

Есть такая задача:
5a11457a1d01e691209726.png

Я решил ее так:
var N, i, l, k,j:integer;
	A: array [1..100] of longint;
    B: array [1..100] of longint;
begin
    l:=0;
	read(N);
    for i:=1 to N do 
    	begin
        read(A[i]);
      end;
    
    for i:=1 to N do
        begin
          k:=0;
        	for j:=1 to l do
            	if(A[i]=B[l]) then
                	begin
                		k:=1;
                    end;
            if(k<>1) then
            	begin
            		Inc(l);
            		B[l]:=A[i];
                end;
        end;
    write(l);
end.


Все тесты она прошла, но мне кажется, что это очень плохое решение. Как бы вы написали ее? Просто через 2 массива в голову ничего не приходит.
  • Вопрос задан
  • 201 просмотр
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если массив уже отсортирован, то достаточно один раз пройти по нему, отмечая моменты смены числа
var count = 1;
for (var i = 1; i < n; i++) {
  if (mark[i] != mark[i-1]) {
    count++;
  }
}
Ответ написан
Комментировать
angrySCV
@angrySCV
machine learning, programming, startuping
как вариант на более высоком уровне можно положить все входящие данные в Set (коллекцию содержащее множество уникальных элементов), и потом посчитать размер коллекции.
код будет выглядеть в стиле:
inputStringData
 .split(" ")
 .map(inputElement => inputElement.toInt)
 .toSet
 .size

П. С.
шаг с переводом строки ( .map(inputElement => inputElement.toInt) ) в тип Интэджер не обязателен, можно посчитать и разные строки, это лишь улучшает эффективность хранения промежуточного массива перед подсчетом
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы