Вам нужно сделать
let locManager = CLLocationManager()
экземпляром var, чтобы хранить сильную ссылку для делегата, также вам нужен 1 из них
locManager.startUpdatingLocation()
locManager.requestLocation()
Отсортируйте массив и затем сделайте быструю передачу для подсчета каждого числа. Алгоритм имеет O (N*logN) сложность.
С другой стороны, создайте хеш-таблицу, с помощью числа в качестве ключа. Хранилище в хеш-таблице счетчик для каждого элемента Вы ввели. Вы сможете считать все элементы в одной передаче; однако, сложность алгоритма теперь зависит от сложности Вашей функции издевательства.
немного псевдокода:
//split string into array firts
strsplit(numbers) //PHP function name to split a string into it's components
i=0
while( i < count(array))
{
if(isset(list[array[i]]))
{
list[array[i]]['count'] = list + 1
}
else
{
list[i]['count'] = 1
list[i]['number']
}
i=i+1
}
usort(list) //usort is a php function that sorts an array by its value not its key, Im assuming that you have something in c++ that does this
print list[0]['number'] //Should contain the most used number
Если у Вас есть RAM, и Ваши значения не являются слишком большими, используют вид подсчета.
Если спектр элементов является большим по сравнению с числом элементов, я был бы, как другие сказали, просто вид и сканирование. Это время n*log n, и никакое дополнительное пространство (возможно, регистрируются n дополнительный).
Проблема с видом подсчета состоит в том, что, если спектр значений является большим, может потребоваться больше времени для инициализации массива количества, чем к виду.
Оптимизированный для пространства:
Quicksort (например), затем выполняют итерации по объектам, отслеживанию самого большого количества только. В лучшем случае O (N регистрируют N).
Оптимизированный для скорости:
Выполните итерации по всем элементам, отслеживанию отдельных количеств. Этот алгоритм всегда будет O (n).
Возможная реализация C++, которая использует STL, могла быть:
#include <iostream>
#include <algorithm>
#include <map>
// functor
struct maxoccur
{
int _M_val;
int _M_rep;
maxoccur()
: _M_val(0),
_M_rep(0)
{}
void operator()(const std::pair<int,int> &e)
{
std::cout << "pair: " << e.first << " " << e.second << std::endl;
if ( _M_rep < e.second ) {
_M_val = e.first;
_M_rep = e.second;
}
}
};
int
main(int argc, char *argv[])
{
int a[] = {2,456,34,3456,2,435,2,456,2};
std::map<int,int> m;
// load the map
for(unsigned int i=0; i< sizeof(a)/sizeof(a[0]); i++)
m [a[i]]++;
// find the max occurence...
maxoccur ret = std::for_each(m.begin(), m.end(), maxoccur());
std::cout << "value:" << ret._M_val << " max repetition:" << ret._M_rep << std::endl;
return 0;
}
Хеш-алгоритм (создают количество [я] = #occurrences (i) в в основном линейное время) очень практичен, но теоретически не строго O (n), потому что могли быть хэш-коллизии во время процесса.
Интересный особый случай этого вопроса является алгоритмом большинства, где Вы хотите найти элемент, который присутствует в, по крайней мере, n/2 записей массива, если какой-либо такой элемент существует.
Вот быстрое объяснение и более подробное объяснение того, как сделать это в линейное время без любого вида ловкости хеша.
Вот мое полное, протестированный, версия, с помощью a std::tr1::unordered_map
.
Я делаю это приблизительно O (n). Во-первых это выполняет итерации через n входные значения для вставления/обновления количеств в unordered_map
, затем это делает a partial_sort_copy
который является O (n). 2*O (n) ~ = O (n).
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <iostream>
namespace {
// Only used in most_frequent but can't be a local class because of the member template
struct second_greater {
// Need to compare two (slightly) different types of pairs
template <typename PairA, typename PairB>
bool operator() (const PairA& a, const PairB& b) const
{ return a.second > b.second; }
};
}
template <typename Iter>
std::pair<typename std::iterator_traits<Iter>::value_type, unsigned int>
most_frequent(Iter begin, Iter end)
{
typedef typename std::iterator_traits<Iter>::value_type value_type;
typedef std::pair<value_type, unsigned int> result_type;
std::tr1::unordered_map<value_type, unsigned int> counts;
for(; begin != end; ++begin)
// This is safe because new entries in the map are defined to be initialized to 0 for
// built-in numeric types - no need to initialize them first
++ counts[*begin];
// Only need the top one at this point (could easily expand to top-n)
std::vector<result_type> top(1);
std::partial_sort_copy(counts.begin(), counts.end(),
top.begin(), top.end(), second_greater());
return top.front();
}
int main(int argc, char* argv[])
{
int a[] = { 2, 456, 34, 3456, 2, 435, 2, 456, 2 };
std::pair<int, unsigned int> m = most_frequent(a, a + (sizeof(a) / sizeof(a[0])));
std::cout << "most common = " << m.first << " (" << m.second << " instances)" << std::endl;
assert(m.first == 2);
assert(m.second == 4);
return 0;
}
Это wil быть в O (n)............, но вещь является большое нет. из массива может взять другой массив с тем же размером............
для (i=0; я
mar=count [o]; index=o;
для (i=0; я
затем вывод будет......... индексом элемента, происходится для макс. нет. из времен в этом массиве........
здесь [] массив данных, где мы должны искать макс. происшествие определенных нет. в массиве.......
количество [] наличие количества каждого элемента.......... Отметьте: мы жирный knw диапазон данных будем в массиве.. скажите для, например, данные в том массиве, который диапазоны от 1 до 100....... затем имеют массив количества 100 элементов для отслеживания, если его произошедший increament индексируемое значение одним........