Професионална програма
Loading...
+ Нов въпрос
KristinaDimi avatar KristinaDimi 0 Точки

MostFrequentNumber

Здравейте,

имам нужда от помощ със задача Problem 4 – Most Frequent Number от C++ Fundamentals.

Дава ми само 60 точки

 

Това е моето решение:

https://pastebin.com/pWvfQuap

 

Условие на задачата:

Write a program that finds the most frequent number in a given sequence of numbers.

  • Numbers will be in the range [0…9].
  • In case of multiple numbers with the same maximal frequency, print all of them, ordered from smallest to largest, separated by spaces

Examples

Input

Output

Output

13

4 1 1 4 2 3 4 4 1 2 4 9 3

4

The number 4 is the most frequent (occurs 5 times)

8

2 2 2 2 1 2 2 2

2

The number 2 is the most frequent (occurs 7 times)

 

2 7 9

The numbers 2, 7 and 9 have the same maximal frequence (each occurs 3 times).

0
C++ Fundamentals 31/08/2020 21:06:16
LoshaPanda avatar LoshaPanda 10 Точки

Здравей Кристина,

Още в началото на кода ти вътре в mostFrequentNumber виждам, че присвояваш и веднага след това затриваш всичко, което си присвоила. Защо ?

vector <int> reppArr = arr; // Това ще каж,е че всички елементи от arr се присвояват към repArr

reppArr.erase(reppArr.begin(), reppArr.end()); // Тук триеш отначалото до края.

При това още на първия вход има грешка за ,, Expression: vector substrict out of range ".
Защо ?

- Представи си, че имам вектор от 1 елемент. Сега твоя цикъл ще се извърти 1 път, обаче ще се опита да достъпи втория елемент в numPlusNext, понеже имаме i + 1, а такъв елемент няма. 

Също така защо трупаш всичко в reppArr ? Какво искаш да запазиш ?

 

Дори това да беше минали сега да си представим, че имаме следния случай :

[2, 5, 1, 2]

Твоята програма ще вземе 2, 5 и ще ги сравни.
Ще вземе 5, 1 и ще ги сравни.

Какво остава за двойката в началото и края ?

Трябва да минем през числата, като отпечатаме числото, което се среща най-често.

Това може да се реши лесно с hashTable - unordered_map ( не знам дали сте го учили още ) или с O(N^2) решение.

Ще те наклопня и в двете посоки.

О(N^2)

[2, 5, 1, 2]

Сравняваме всяко число с всяко в масива.

Взимаме '2' и го сравняваме с '2' '5', '1' и '2', като имаме променлива за текущата ни най-голяма бройка и числото за тази бройка.

После ще вземем '5' и ще го сравним с '2', '5', 1' и '2'.

С unordered_map имаме ключ и стойност.

Пъхаме всички числа, като ключове и всички поватряния, като стойности, като след това ще минем пак през него с цикъл и ще имаме променлива max_count, която става равна при всяка по-голяма стойност.

 

Надявам се да съм ти бил от полза.

1
KristinaDimi avatar KristinaDimi 0 Точки

Благодаря,реших задачата на чисто и се получи.

0