За последние 24 часа нас посетили 17378 программистов и 1293 робота. Сейчас ищут 1596 программистов ...

Наиболее часто встречающееся число в массиве

Тема в разделе "Вопросы от блондинок", создана пользователем Asprin, 16 июн 2016.

  1. Asprin

    Asprin Новичок

    С нами с:
    16 июн 2016
    Сообщения:
    1
    Симпатии:
    0
    Всем привет.

    Помогите пожалуйста с поиском самого часто встречающегося элемента (числа) в массиве.
    Поиск в гугле выдает примеры на других языках программирования. Пытался адаптировать под php - безрезультатно. Может кто подскажет рабочий вариант?

    Из того, что я пробовал:
    PHP:
    1. <?php
    2. $curr_value = $object->records[0]->loc;
    3. $curr_count = 1;
    4. $max_value  = $object->records[0]->loc;
    5. $max_count  = 1;
    6.  
    7. for ($i = 1; $i < $massivecount; $i++) {
    8.     if ($object->records[$i]->loc == $curr_value)
    9.         $curr_count = $curr_count + 1;
    10.     else {
    11.         if ($curr_count > $max_count) {
    12.             $max_count = $curr_count;
    13.             $max_value = $curr_value;
    14.         }
    15.         $curr_count = 1;
    16.         $curr_value = $object->records[$i]->loc;
    17.     }
    18. }
    или второй вариант:

    PHP:
    1. $num     = ($object->records[1]->loc);
    2. $max_frq = 1;
    3.  
    4. for ($i = 1; $i < 19; $i++) {
    5.     $frq = 1;
    6.     for ($k = $i + 1; $k < massivecount; $k++) {
    7.         if (($object->records[$i]->loc) == ($object->records[$k]->loc))
    8.             $frq = $frq + 1;
    9.      
    10.         if ($frq > $max_frq) {
    11.             $max_frq = $frq;
    12.             $num     = ($object->records[$i]->loc);
    13.         }
    14.     }
    15.  
    16.  
    17. }
    18.  
    19. echo "Число $num встречается $max_frq раз" . "\n";
    $curr_value = $object->records[0]->loc; $curr_count = 1;
    $max_value = $object->records[0]->loc; $max_count = 1;

    for ($i=1; $i < $massivecount; $i++) {
    if ($object->records[$i]->loc == $curr_value) $curr_count = $curr_count+1;
    else {
    if ($curr_count > $max_count) {
    $max_count = $curr_count; $max_value = $curr_value;
    }
    $curr_count = 1;
    $curr_value = $object->records[$i]->loc;
    }
    }

    или второй вариант:

    $num = ($object->records[1]->loc);
    $max_frq = 1;

    for ($i = 1; $i < 19; $i++) {
    $frq = 1;
    for ($k = $i+1; $k < massivecount; $k++) {
    if (($object->records[$i]->loc) == ($object->records[$k]->loc))
    $frq = $frq + 1;

    if ($frq > $max_frq) {
    $max_frq = $frq;
    $num = ($object->records[$i]->loc);
    }}


    }

    echo "Число $num встречается $max_frq раз" . "\n";
     
    #1 Asprin, 16 июн 2016
    Последнее редактирование модератором: 17 июн 2016
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  3. wano987

    wano987 Новичок

    С нами с:
    28 июн 2016
    Сообщения:
    9
    Симпатии:
    0
    Зачем использовать классы? Тут же достаточно массива, всего-то с одним индексом.
    PHP:
    1. <?php
    2. $array=array();//тут числа
    3.  
    4. for($i=0;$array[$i];$i++)
    5. {//не люблю WHILE ибо не умею его готовить.
    6.    $sel[$array[$i]]++;
    7.    if($sel['top'] < $sel[$array[$i]])
    8.    {
    9.      $sel['top']=$array[$i];
    10.    };
    11. }
    12. die('Число "'.$sel['top'].'" встречается '.$sel[$sel['top']].' раз.');
    13. ?>
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Почему не использовать мануал для поиска существующих функций?)
     
  5. wano987

    wano987 Новичок

    С нами с:
    28 июн 2016
    Сообщения:
    9
    Симпатии:
    0
    Главное - когда в 90% случаев нет нужной функции - просто перестаёшь надеяться, что такое существует и даже не ищешь. Ну и иногда бывают периоды, когда поисковики выдают особо некорректные варианты.

    Второстепенное:
    1. Непортируемость решения на иные платформы.
    Может это у меня опыт плохой, но когда в очередной раз приходится переделывать "красивую" запись в "рабочую" - это начинает задалбывать. А ведь ещё и язык может скончаться и всё что ты знаешь - можно просто забыть.
    2. Невозможность расширить функционал без серьёзного изменения кода (например, нужно заодно подчистить дубли - будет уже два прохода по массиву, а это очень плохо)
    3. Закрытость функции - я не знаю как она сама написана. За последние 10 лет моё доверие ко всему существенно подорвано, потому при возможности предпочитаю решения с "кишками наружу".

    Вот как бы этот набор.

    Хотя, в процессе обучения, есть ещё один вариант:
    ►Использование готовых решений является прежде всего упрощением жизни. С учётом того, что качественное программирование возможно исключительно при понимании сути языка на котором это создаётся, отсутствие подобного опыта становится критичным.
    Так что встроенные функции становятся удобны лишь тогда, когда либо не нужно в этом разбираться (срок исследования до приемлемого результата критически большой), либо шанс, что этот опыт не нужен - запределен.

    Ну или либо если просто лень/дедлайн что-то делать самому.
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @wano987 вот ты тряпку расписал а толку ноль. Задача решается встроенной функцией. Встроенная функция работает быстрее самописной. Продолжай тратить время на повторение готового функционала. Про дедлайны он тут еще будет рассказывать, умора...
     
  7. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Да чувак явно думает, что он умнее чем весь коллектив, команды zend :D