1. C++ / Говнокод #26453

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    Задачка с собеседования.
    
    Удалить из неупорядоченного массива чисел представленного как std::vector<int> элемент за O(1).
    
    А я тупил, и дошел до ответа только с подсказками.

    Запостил: OlegUP, 27 Февраля 2020

    Комментарии (75) RSS

    • Какой элемент?
      Ответить
      • >неупорядоченного
        седьмой, конечно
        Ответить
        • Просто запоминаем, что седьмой элемент трогать не нужно. Везде в циклах пишем “if (i == 7) continue;”.
          Ответить
      • Произвольный конечно же.
        Ответить
        • По какому условию его выбирать то, если неупорядочен? По значению?
          Ответить
        • Дай определение понятию «удалить элемент».
          Ответить
          • http://www.cplusplus.com/reference/vector/vector/erase/
            Ответить
          • Видимо автор ожидал каких-то махинаций с итератором.
            Но даже думать не хочется, поскольку pop_back решает поставленную задачу.
            Ответить
      • Который за O(1), остальные не трогать.
        Ответить
    • vec.pop_back();

      O(1) по Стандарту.
      Ответить
      • Удалить любой элемент?
        Ответить
        • Отправил комментарий до обновления страницы и уточнения задачи не увидел. Исходной задаче решение полностью соответствует:
          >>> Удалить из неупорядоченного массива чисел представленного как std::vector<int> элемент за O(1).
          Ответить
          • Подтверждаю. Перечитал исходую задачу, перечитал решение. Всё чётко.
            Ответить
            • Ладно, но мы то знаем, что нужно удалить любой элемент, за О(1).
              Скажем, если элемент выбирается случайно.
              Ответить
              • Так он и удалит любой элемент, какой мы случайно запишем в конец вектора.
                Ответить
        • Да. Код удаляет из конца вектора любой последний элемент.
          Ответить
          • Ты натолкнул меня на правильный ответ: vec.clear()
            Удаляет вообще все элементы, в.т.ч. нужный.
            Ответить
            • A O(1)?
              Ответить
              • Ну как бы и есть О(1), но нужно удалить элемент, а не все элементы.
                Ответить
            • Не сойдет.
              Ответить
              • Откуда О(n)?
                size=0 и заебца, это же тебе не жаба, где нужно занулять
                Ответить
                • ничего не надо занулять в жабе.
                  void a() {
                  List<Hui> hui = new ArrayList<>();
                  hui.add(new Hui());
                  hui.add(new Hui());
                  hui.add(new Hui());
                  } // Очищаю за O(1), дальше говно гц подберет
                  Ответить
                  • Я про имплементацию clear() в жабе.
                    Ответить
                    • НЕУПОРЯДОЧЕННОГО ВЕКТОРА НЕ СУЩЕСТВУЕТ
                      Ответить
                      • ВЕКТОРА НЕ СУЩЕСТВУЕТ, ЭТО АБСТРАКЦИЯ
                        ЕСТЬ ТОЛЬКО ЭЛЕМЕНТАРНЫЕ ЧАСТИЦЫ, ИЗ КОТОРЫХ СОСТОИТ ОЗУ
                        Ответить
              • НЕУПОРЯДОЧЕННОГО ВЕКТОРА НЕ СУЩЕСТВУЕТ
                Ответить
      • Я вот не крестоблядь, но в cppref прочитал
        [qute]
        The elements are stored contiguously, which means that elements can be accessed not only through iterators, but also using offsets to regular pointers to elements
        [/qute]

        НЕУПОРЯДОЧЕННОГО ВЕКТОРА НЕ СУЩЕСТВУЕТ
        идите нахуй.
        Вот мой ответ
        Ответить
    • Хуйня какая-то. Видимо ждали ответа, что это невозможно.
      Ответить
    • Удаление произвольного элемента. Работает только на x86 (точнее, на платформах с sizeof(int) == sizeof(intptr_t)). O(1).
      int main()
      {
          std::vector<int> vec;
          for (auto && x : { 1,2,3,4,5,6,7,8,9,10 }) {
              vec.push_back(reinterpret_cast<int>(new int));
              *reinterpret_cast<int*>(vec.back()) = x;
          }
      
          vec[6] = reinterpret_cast<int>(nullptr);  // удалить седьмой элемент
      
          std::cout << "[";
          for (auto && it = vec.begin(); it != vec.end(); ++it) {
              auto && itPtr = reinterpret_cast<int*>(*it);
              if (itPtr) {
                  std::cout << *itPtr;
                  if (it != vec.end() - 1) {
                      std::cout << ", ";
                  } else {
                      std::cout << "]";
                  }
              }
          }
          // [1, 2, 3, 4, 5, 6, 8, 9, 10]
      
          for (auto && x : vec) {
              auto xPtr = reinterpret_cast<int *>(x);
              if (xPtr) {
                  delete xPtr;
              }
          }
          return EXIT_SUCCESS;
      }
      Ответить
      • Я тоже думал null записать. Но решение весьма условное и с кучей ворнингов.

        Кмк, изящнее pop_back нет ничего.
        Ответить
        • Я не понял твоё решение с pop_back, можешь пояснить?
          Ответить
          • Это не моё решение.

            >Удалить из неупорядоченного массива std::vector<int> элемент за O(1).

            Ну вот gost и удалил последний элемент.
            Ответить
            • Ниже было уточнение, что удалять нужно произвольный, а не только последний.
              Ответить
              • Ну правильно, код удалит произвольный элемент из конца вектора.
                Ответить
                • И вообще, правки в ТЗ не принимаем.
                  Ответить
                • НЕУПОРЯДОЧЕННОГО ВЕКТОРА НЕ СУЩЕСТВУЕТ
                  Ответить
                  • приведи реальный пример, где необходимо «несуществование неупорядоченного вектора»
                    Ответить
        • Так тут внутри вектора хранятся указатели, скащенные к интам (чтобы задаче соответствовать), а уже внутри укококозателей лежат любые числа.

          Но да, pop_back() — самое адекватное решение.

          Какая задача — такой и ответ.
          Ответить
          • НЕУПОРЯДОЧЕННОГО ВЕКТОРА НЕ СУЩЕСТВУЕТ
            Ответить
    • vec[pituz] = vec.back();
      vec.pop_back();

      Я подобной питушнёй страдал в школьное время, когда на поцкале генерировал случайные перестановки какой-то питушни.
      Ответить
      • Похоже на правду. Нужно было угадать условие задачи.
        Ответить
        • НЕУПОРЯДОЧЕННОГО ВЕКТОРА НЕ СУЩЕСТВУЕТ
          Ответить
      • Ну да, правильный ответ.
        Ответить
      • std::swap(vec[pituz], *vec.back());
        vec.pop_back();

        Вот теперь справедливость.
        Ответить
    • Крестоблядь не смогла в алгоритмы, то ли дело Set в "Java Script"
      Ответить
      • НЕУПОРЯДОЧЕННОГО ВЕКТОРА НЕ СУЩЕСТВУЕТ
        Ответить
        • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set

          Учи матчасть, петушок, именно поэтому я за "Java Script"
          Ответить
          • дибил не знает разницы между вектором и сетом. Сразу видно, что математику он не учил: строго по заветам сёмы
            Ответить
            • Сет > Вектор, а значит Вектор = беды с башкой
              Ответить
              • годные вореции
                Ответить
              • Сет — бог-воин с красными жгучими глазами, единственный из всех, кто способен одолеть во тьме змея Апопа, олицетворяющего мрак и жаждущего поработить Ра в тёмных глубинах подземного Нила.
                Ответить
                • Я - Баст, богиня и владычица! Слава Амону-Ра, творцу всего сущего! Я - грозная богиня, дочь Солнца, повелительница звезд; молния - сверкание моих глаз, гром - мой голос; когда я шевелю усами, трясётся земля, а хвост мой - лестница в небо.
                  Ответить
    • Что такое «неупорядоченного»?
      Ответить
      • НЕУПОРЯДОЧЕННОГО ВЕКТОРА НЕ СУЩЕСТВУЕТ
        Ответить
        • Не в этом свинособака суть. Дай определение понятию садись на флешку.

          Я не понял пидораха, твоё решение русня весьма условное и с кучей ворнингов.

          Дай определение произвольного элементарные рашка частицы, из которых состоит бамп отсосу озу неупорядоченного вектора не существует свинособака я не крестоблядь не смогла в алгоритмы, то ли дело пердолинг прыщеблядей на флешку.

          Неупорядочен? Тупая русня по значению? Можно случайно запишем в конец вектора. да. код удалить любой элементы. не сойдет. откуда о(n)?

          Ну вот gost пидораха, и удалил последний. Тупая русня.
          Ответить
          • >садись на флешку.
            Ответить
          • Тупая русня не пишет тут комменты, она на бутылке сидит
            Ответить
            • Дай определение произвольной элементарной рашка-частицы, из которых состоит свинособака.
              Ответить
              • Водка + Медведь + Балалайка + Пу**н + Бутылка
                Ответить
                • https://scontent-waw1-1.cdninstagram.com/v/t51.2885-15/sh0.08/e35/c10.0.699.699a/s640x640/81535757_216888886145142_236319581946927 9296_n.jpg
                  Ответить
                  • сраный цукерман
                    https://i.postimg.cc/T1qKhpBn/81535757-216888886145142-2363195819469279296-n.jpg
                    Ответить
          • Аплодирую, стоя на передних руках!
            Ответить
      • то же самое, что и не отсортированного, как бы математики чаще этот термин используют.
        Ответить
    • НЕУПОРЯДОЧЕННОГО ВЕКТОРА НЕ СУЩЕСТВУЕТ
      Ответить
      • ВЕКТОРА НЕ СУЩЕСТВУЕТ, ЭТО АБСТРАКЦИЯ
        ЕСТЬ ТОЛЬКО ЭЛЕМЕНТАРНЫЕ ЧАСТИЦЫ, ИЗ КОТОРЫХ СОСТОИТ ОЗУ
        Ответить
        • Неупорядоченного вектора на свалке не существует так тут туши пердак бамп отсосу внутри вектора.
          Ответить
    • ХУЙ
      Ответить
    • Как у меня бомбит с питущка, который напейсал, что неупорядоченного вектора не существует. Человек волен придумывать любые математические абстракции, на которые хватит воображения.
      Ответить
    • я принял решение больше никогда не «удалять произвольный элемент из вектора»
      Ответить

    Добавить комментарий