Перейти к публикации
  • Сейчас на странице   Всего пользователей: 5   (0 пользователей, 5 гостей)

Rooster

Программирование[11]

var  

311 пользователей проголосовало

У вас нет прав на голосование в этом опросе, или на просмотр результатов опроса. Пожалуйста, войдите или зарегистрируйтесь для голосования в опросе.

Рекомендованные сообщения

(изменено)

Вот щас еще красивее сделал

 

//Online C++ Compiler

#include <iostream>
#include <set>
#include <queue>
using namespace std;

struct MovingAverageWithoutOutliers{
  int n, m;
  multiset<float> small, middle, large;
  queue<float> q;
  float sum=0;
  
  MovingAverageWithoutOutliers(int n_input, int m_input) {
    n = n_input;
    m = m_input;
    while(small.size()<m){
      small.insert(0);
      large.insert(0);
    }
    while(middle.size()<n-2*m) middle.insert(0);
    while(q.size()<n) q.push(0);
  }
  
  void erase(multiset<float>& ms, multiset<float>::iterator it) {
    if (&ms==&middle) sum-=*it;
    ms.erase(it);
  }
  
  void insert(multiset<float>& ms, float x) {
    if (&ms==&middle) sum+=x;
    ms.insert(x);
  }
  
  void rebalance(multiset<float>& lower, multiset<float>& upper) {
    while (*lower.rend() > *upper.begin()) {
      float lower_end = *lower.rbegin();
      float upper_end = *upper.begin();
      erase(lower, prev(lower.end()));
      erase(upper, upper.begin());
      insert(lower, upper_end);
      insert(upper, lower_end);
    }
  }
  
  float next(float x) {
    float removed = q.front();
    q.pop();
    q.push(x);
    for (auto* ms_ptr : {&small, &middle, &large}) {
      auto& ms = *ms_ptr;
      if (ms.count(removed)) {
        erase(ms, ms.find(removed));
        insert(ms, x);
        break;
      }
    }

    rebalance(small, middle);
    rebalance(middle, large);
    rebalance(small, middle);
    return sum/(n-2*m);
  }
};

int main() {
  auto a = MovingAverageWithoutOutliers(3,1);
  // your code goes here
  cout << a.next(1) << endl;
  cout << a.next(2) << endl;
  cout << a.next(3) << endl;
  return 0;
}

 


Изменено пользователем Vova
UglyBastard понравилось это

towBCf6.pngimage.png.6f88ac9ad688355eb803ba0b32e309ca.pngimage.png.c05354238865437022b3e4a97a835dbd.pngimage.png.0e8329f2b07e208ae8ef4e3f6878d126.png

 

 

 

Поделиться сообщением


Ссылка на сообщение
Vova написал 39 минут назад:

Вот щас еще красивее сделал

 


//Online C++ Compiler

#include <iostream>
#include <set>
#include <queue>
using namespace std;

struct MovingAverageWithoutOutliers{
  int n, m;
  multiset<float> small, middle, large;
  queue<float> q;
  float sum=0;
  
  MovingAverageWithoutOutliers(int n_input, int m_input) {
    n = n_input;
    m = m_input;
    while(small.size()<m){
      small.insert(0);
      large.insert(0);
    }
    while(middle.size()<n-2*m) middle.insert(0);
    while(q.size()<n) q.push(0);
  }
  
  void erase(multiset<float>& ms, multiset<float>::iterator it) {
    if (&ms==&middle) sum-=*it;
    ms.erase(it);
  }
  
  void insert(multiset<float>& ms, float x) {
    if (&ms==&middle) sum+=x;
    ms.insert(x);
  }
  
  void rebalance(multiset<float>& lower, multiset<float>& upper) {
    while (*lower.rend() > *upper.begin()) {
      float lower_end = *lower.rbegin();
      float upper_end = *upper.begin();
      erase(lower, prev(lower.end()));
      erase(upper, upper.begin());
      insert(lower, upper_end);
      insert(upper, lower_end);
    }
  }
  
  float next(float x) {
    float removed = q.front();
    q.pop();
    q.push(x);
    for (auto* ms_ptr : {&small, &middle, &large}) {
      auto& ms = *ms_ptr;
      if (ms.count(removed)) {
        erase(ms, ms.find(removed));
        insert(ms, x);
        break;
      }
    }

    rebalance(small, middle);
    rebalance(middle, large);
    rebalance(small, middle);
    return sum/(n-2*m);
  }
};

int main() {
  auto a = MovingAverageWithoutOutliers(3,1);
  // your code goes here
  cout << a.next(1) << endl;
  cout << a.next(2) << endl;
  cout << a.next(3) << endl;
  return 0;
}

 

 

напомню вове сосал хуй мужчина

думайте

Vova понравилось это

Поделиться сообщением


Ссылка на сообщение
madvlaydin написал 12 минут назад:

думайте

зачем нам думать о сосущих хуй мужчинах?

что за пропаганда лгбт и участие в незаконном экстримистском международном движении?


 

очень крутые котейки

RqvSzvr.png


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение
Vova написал 2 часа назад:

Вот щас еще красивее сделал

 


//Online C++ Compiler

#include <iostream>
#include <set>
#include <queue>
using namespace std;

struct MovingAverageWithoutOutliers{
  int n, m;
  multiset<float> small, middle, large;
  queue<float> q;
  float sum=0;
  
  MovingAverageWithoutOutliers(int n_input, int m_input) {
    n = n_input;
    m = m_input;
    while(small.size()<m){
      small.insert(0);
      large.insert(0);
    }
    while(middle.size()<n-2*m) middle.insert(0);
    while(q.size()<n) q.push(0);
  }
  
  void erase(multiset<float>& ms, multiset<float>::iterator it) {
    if (&ms==&middle) sum-=*it;
    ms.erase(it);
  }
  
  void insert(multiset<float>& ms, float x) {
    if (&ms==&middle) sum+=x;
    ms.insert(x);
  }
  
  void rebalance(multiset<float>& lower, multiset<float>& upper) {
    while (*lower.rend() > *upper.begin()) {
      float lower_end = *lower.rbegin();
      float upper_end = *upper.begin();
      erase(lower, prev(lower.end()));
      erase(upper, upper.begin());
      insert(lower, upper_end);
      insert(upper, lower_end);
    }
  }
  
  float next(float x) {
    float removed = q.front();
    q.pop();
    q.push(x);
    for (auto* ms_ptr : {&small, &middle, &large}) {
      auto& ms = *ms_ptr;
      if (ms.count(removed)) {
        erase(ms, ms.find(removed));
        insert(ms, x);
        break;
      }
    }

    rebalance(small, middle);
    rebalance(middle, large);
    rebalance(small, middle);
    return sum/(n-2*m);
  }
};

int main() {
  auto a = MovingAverageWithoutOutliers(3,1);
  // your code goes here
  cout << a.next(1) << endl;
  cout << a.next(2) << endl;
  cout << a.next(3) << endl;
  return 0;
}

 

 

Элегантное решение рили, с таким не ошибёшься на интервью

 

Свое бы я вряд ли до правильного довел за время интервью (но мб и интервьюеру было бы впадлу проверять все ли корнер кейсы учтены в решении с итераторами, но это и минус тоже)

 

Хочу бтв когда-нибудь пройти в гугл или другой фаанг


 

9Aa4jVY.jpeg

IFVau8G.png

AohP0ps.png

Поделиться сообщением


Ссылка на сообщение
madvlaydin написал 1 час назад:
Vova написал 2 часа назад:

Вот щас еще красивее сделал

 



//Online C++ Compiler

#include <iostream>
#include <set>
#include <queue>
using namespace std;

struct MovingAverageWithoutOutliers{
  int n, m;
  multiset<float> small, middle, large;
  queue<float> q;
  float sum=0;
  
  MovingAverageWithoutOutliers(int n_input, int m_input) {
    n = n_input;
    m = m_input;
    while(small.size()<m){
      small.insert(0);
      large.insert(0);
    }
    while(middle.size()<n-2*m) middle.insert(0);
    while(q.size()<n) q.push(0);
  }
  
  void erase(multiset<float>& ms, multiset<float>::iterator it) {
    if (&ms==&middle) sum-=*it;
    ms.erase(it);
  }
  
  void insert(multiset<float>& ms, float x) {
    if (&ms==&middle) sum+=x;
    ms.insert(x);
  }
  
  void rebalance(multiset<float>& lower, multiset<float>& upper) {
    while (*lower.rend() > *upper.begin()) {
      float lower_end = *lower.rbegin();
      float upper_end = *upper.begin();
      erase(lower, prev(lower.end()));
      erase(upper, upper.begin());
      insert(lower, upper_end);
      insert(upper, lower_end);
    }
  }
  
  float next(float x) {
    float removed = q.front();
    q.pop();
    q.push(x);
    for (auto* ms_ptr : {&small, &middle, &large}) {
      auto& ms = *ms_ptr;
      if (ms.count(removed)) {
        erase(ms, ms.find(removed));
        insert(ms, x);
        break;
      }
    }

    rebalance(small, middle);
    rebalance(middle, large);
    rebalance(small, middle);
    return sum/(n-2*m);
  }
};

int main() {
  auto a = MovingAverageWithoutOutliers(3,1);
  // your code goes here
  cout << a.next(1) << endl;
  cout << a.next(2) << endl;
  cout << a.next(3) << endl;
  return 0;
}

 

 

Показать больше  

напомню вове сосал хуй мужчина

думайте

 

Минусы?

Поделиться сообщением


Ссылка на сообщение
UglyBastard написал 10 часов назад:
Vova написал 13 часов назад:

Вот щас еще красивее сделал

 



//Online C++ Compiler

#include <iostream>
#include <set>
#include <queue>
using namespace std;

struct MovingAverageWithoutOutliers{
  int n, m;
  multiset<float> small, middle, large;
  queue<float> q;
  float sum=0;
  
  MovingAverageWithoutOutliers(int n_input, int m_input) {
    n = n_input;
    m = m_input;
    while(small.size()<m){
      small.insert(0);
      large.insert(0);
    }
    while(middle.size()<n-2*m) middle.insert(0);
    while(q.size()<n) q.push(0);
  }
  
  void erase(multiset<float>& ms, multiset<float>::iterator it) {
    if (&ms==&middle) sum-=*it;
    ms.erase(it);
  }
  
  void insert(multiset<float>& ms, float x) {
    if (&ms==&middle) sum+=x;
    ms.insert(x);
  }
  
  void rebalance(multiset<float>& lower, multiset<float>& upper) {
    while (*lower.rend() > *upper.begin()) {
      float lower_end = *lower.rbegin();
      float upper_end = *upper.begin();
      erase(lower, prev(lower.end()));
      erase(upper, upper.begin());
      insert(lower, upper_end);
      insert(upper, lower_end);
    }
  }
  
  float next(float x) {
    float removed = q.front();
    q.pop();
    q.push(x);
    for (auto* ms_ptr : {&small, &middle, &large}) {
      auto& ms = *ms_ptr;
      if (ms.count(removed)) {
        erase(ms, ms.find(removed));
        insert(ms, x);
        break;
      }
    }

    rebalance(small, middle);
    rebalance(middle, large);
    rebalance(small, middle);
    return sum/(n-2*m);
  }
};

int main() {
  auto a = MovingAverageWithoutOutliers(3,1);
  // your code goes here
  cout << a.next(1) << endl;
  cout << a.next(2) << endl;
  cout << a.next(3) << endl;
  return 0;
}

 

 

Элегантное решение рили, с таким не ошибёшься на интервью

 

Свое бы я вряд ли до правильного довел за время интервью (но мб и интервьюеру было бы впадлу проверять все ли корнер кейсы учтены в решении с итераторами, но это и минус тоже)

 

Хочу бтв когда-нибудь пройти в гугл или другой фаанг

 

Ну я бы зачел если б ты даже накосячил пару кейсов но в целом идея если верная

 

Дык подайся и пройди можешь попросить реферрал у челов на teamblind там буквально все дают на похуй потому что если ты проходишь то им бабки прилетают

 

Амазон вообще не сложнее Яндекса

Фейсбук обычно импользует один и тот же список из 50 вопрос - загугли и прорешай все заранее

Гугл - тут зависит от удачи но куча народа прошла с 3ей и тд попытки да и Гугл уже не считается элитарным потому что народу овердохуя

Че там еще всякие Микрософт Нвидия Апл вообще больше интересуют домейн навыки а не умение решать задачи

У Байтденс по мой вкус самые сложные интервью но почему то я интервьюировался там с разницев в пару месяцев в две разные команды в одну не прошел в другую прошел

 

Короче просто проходи пока не пройдешь и рано или поздно пройдешь - а надо ли это тебе это большой вопрос

UglyBastard понравилось это

towBCf6.pngimage.png.6f88ac9ad688355eb803ba0b32e309ca.pngimage.png.c05354238865437022b3e4a97a835dbd.pngimage.png.0e8329f2b07e208ae8ef4e3f6878d126.png

 

 

 

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

×
×
  • Создать...