Я написал функцию, которая, подсчитывает сколько раз каждый элемент встречается в векторе и создаю новый вектор по типу [{:value count} {:value count} ... ], после чего отфильтровываю новый вектор, чтобы в нем остались только элементы, которые больше n
Однако, показав это преподавателю, мне указали на то, что алгоритм неэффективен, так как большая скорость роста алгоритма. Как это можно исправить?
(defn CountsElement [vec value]
(count (filter (fn[l] (= l value)) vec)))
(defn ValueToCountValue [vec]
(let [v vec
size (count v)]
(loop [i 0 newVec []]
(if (< i size)
(recur (inc i) (conj newVec {:count (CountsElement v (v i)),
:value (v i)}
)) newVec ))))
(defn search [vec value]
(map :value (filter (fn[l] (> (l :count) value)) (ValueToCountValue vec))))
(println "Result" [3 0 1 7 1 2 3 3] (ValueToCountValue [3 0 1 7 1 2 3 3]))
(println "Result" (search [3 0 1 7 1 2 3 3] 1))