Member 13214692 Ответов: 2

Нужна помощь на собеседовании вопрос на 2D массивы в с ++ #


Привет,
В одном из интервью с компанией top tier tech мне была дана следующая задача кодирования на C#. Может ли кто-нибудь помочь мне с оптимизированным решением для этого?

/*
Цель этого упражнения-построить дорожную сеть, соединяющую каждую пару городов.Каждый город должен быть соединен друг с другом один раз.
*/
программа Открытый класс
{
/* Ваша функция RoadBuilder должна возвращать список новых дорог, которые необходимо построить,
если существующие дороги задаются построенными дорогами и общее количество
города - это nCities. Дороги не должны соединять города между собой.
*/
public static int [] [] RoadBuilder(int nCities, int [,] builtRoads)
{
// реализуйте эту функцию здесь
return new int[0][];
}

публичный статический пустота главный()
{
int [,] test1 = new int[3, 2]{{0, 1}, {1, 2}, {3, 2}};
Приставка.WriteLine(RoadBuilder(4, test1)); / / ожидаемый результат должен быть {{0,2}, {0, 3}, {1, 3}}
}
}

Что я уже пробовал:

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

2 Ответов

Рейтинг:
2

OriginalGriff

Мы не делаем домашнее задание: оно задано не просто так.
А интервью-это домашнее задание-интервьюер должен знать, как ты подумайте, как работа, не я.
Предоставление вам решения улучшает ваши очевидные способности ложно и дает вам преимущество перед людьми, которые могут сделать эту работу сами - это то, что ищет компания! Мы не сможем поддерживать вас на протяжении всей вашей карьеры в компании, если вы получите работу, во всяком случае, если вы получите зарплату, а не мы, так что это будет несправедливо по отношению ко всем. Вы, в конечном счете; подлинные претенденты; компания.

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!

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


Рейтинг:
2

Robert Welliever

Вау,я не мог не согласиться с мокрым одеялом OriginalGriff. Я обнаружил, что один из лучших способов учиться-это смотреть непосредственно на решение, а затем перепроектировать его и улучшать. В этом духе вот неоптимальное решение, которое прошло бы в ситуации интервью:

public static int[][] RoadBuilder(int nCities, int[,] builtRoads)
{
    // Build lookup of existing connections
    HashSet<string> alreadyBuilt = new HashSet<string>();
    string hereToThere, thereToHere;
    for(int i = 0; i < builtRoads.Length / 2; i++)
    {
        hereToThere = builtRoads[i, 0] + "|" + builtRoads[i, 1];
        thereToHere = builtRoads[i, 1] + "|" + builtRoads[i, 0];
        if(!alreadyBuilt.Contains(hereToThere))
            alreadyBuilt.Add(hereToThere);
        if(!alreadyBuilt.Contains(thereToHere))
            alreadyBuilt.Add(thereToHere);
    }

    // Identify missing roadways
    List<int[]> toBuild = new List<int[]>();
    for(int i = 0; i < nCities; i++)
    {
        for(int j = 0; j < nCities; j++)
        {
            if(i == j) // ignore a city to itself
                continue;
            hereToThere = i.ToString() + "|" + j.ToString();
            thereToHere = j.ToString() + "|" + i.ToString();
            if(!alreadyBuilt.Contains(hereToThere) &&
               !alreadyBuilt.Contains(thereToHere))
            {
                toBuild.Add(new int[2] { i, j });
                alreadyBuilt.Add(thereToHere);
            }
        }
    }

    // Fill formatted results
    int[][] results = new int[toBuild.Count][];
    toBuild.CopyTo(results);
    return results;
}


Хотя лично я бы предупредил вас, чтобы Вы были начеку, если пойдете туда работать. Им нужна функция, которая принимает многомерный массив в качестве параметра и возвращает двумерный массив. В реальной жизни это не имеет никакого смысла и увеличивает вероятность ошибки астрономически. Программист Java, пришедший на C#, был бы озадачен, и даже опытные программисты C#, скорее всего, почесали бы в затылке.


F-ES Sitecore

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

Richard MacCutchan

Вы не помогаете людям, выполняя за них их работу. ОП мог бы легко найти некоторые ответы, используя инициативу и силу мозга, а не ожидая, что кто-то другой сделает это за него.

F-ES Sitecore

Если бы коллега получил задание и просто спросил меня, как это сделать, я бы, вероятно, хотел, чтобы его уволили или, как минимум, удалили из моей команды. Если вы работаете, то это для того, чтобы делать работу, если вы не можете делать эту работу, вы не должны работать. Помогать людям обманным путем получить работу никому не помогает. Как бы вам понравилось, если бы вы пошли к врачу, а у этого врача на самом деле не было знаний, чтобы помочь вам, он заставил других людей сдавать экзамены и отвечать на вопросы собеседования?

Robert Welliever

Это вполне опровергаемое утверждение. Мне помогали бесчисленное количество раз, глядя на ответы других людей. Мне также особенно помогало чтение ответов на вопросы интервью.

F-ES Sitecore

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

Что касается увольнения людей, я не приношу извинений за то, что люди способны выполнять работу, для которой их наняли. Когда вы управляете командой в сжатые сроки, и один человек всегда нуждается в том, чтобы другие выполняли за него свою работу, возможно, вы измените свое мнение.

Richard MacCutchan

Может быть, это и не доказуемо, но, безусловно, основано на опыте.

Robert Welliever

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

Richard MacCutchan

Да, вы правы, а я ошибаюсь.

F-ES Sitecore

Мы не говорим о вопросах или помощи...мы говорим о ком-то, кто получил задание и не имеет возможности выполнить его, даже начать его, а вместо этого хочет, чтобы другие люди делали за него свою работу. Если вы не видите разницы между ними, тогда удачи вам самим.

F-ES Sitecore

Когда вы пробудете здесь немного дольше, вы научитесь понимать, когда вы действительно помогаете кому-то учиться, а когда просто выполняете за него чужую работу. Учитывая, что у трех долгосрочных членов есть одно мнение, а у вас другое, возможно, вам следует учитывать тот факт, что у этих членов есть опыт, которого у вас нет, и что, возможно, мы правы.

F-ES Sitecore

Это аргумент соломенного человека, я сказал, что это уровень опыта, который дает вам insite, и тот факт, что у меня больше опыта работы с этим сайтом, чем у вас (как и у Гриффа и Ричарда), является неоспоримым фактом. Если вы хотите утверждать, что опыт не приводит к инсайту, то удачи вам в этом.

F-ES Sitecore

Я сказал, что опыт был движущей силой, и вы изменили это на "членский стаж" и спорили против "членского стажа" (что бы это ни значило). Когда вы возражаете против аргумента, который слабее того, что сказал другой человек, и не является тем, что он на самом деле сказал, тогда это по определению аргумент соломенного человека. Вы теперь следуете, что до объявления рассчитанный на предубеждения аргументы. Если бы ваша позиция имела хоть какой-то вес, вы бы придерживались фактов.

F-ES Sitecore

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

George Swan

Я в замешательстве. Может кто-нибудь, пожалуйста, указать, где в правилах https://www.codeproject.com/Articles/64628/Code-Project-Quick-Answers-FAQ#rules говорится ли в нем, что на домашние вопросы нельзя отвечать?

NotPolitcallyCorrect

Где вы видели, чтобы кто-то сказал, что на домашние вопросы не будут даны ответы? Ответы на домашние задания здесь даются постоянно.

George Swan

Просто Грифф сказал, что мы не делаем твою домашнюю работу. Поэтому я предположил, что это должно быть против правил. Но я посмотрел на правила и не смог их увидеть, а затем попросил разъяснений, которые вы любезно мне дали. Спасибо. Итак, теперь, когда вы ответили и стало ясно, что мы имеем право публиковать решения домашних заданий, возникает еще один вопрос. А именно, кто такие ‘мы "в ‘мы не делаем вашу домашнюю работу"?

NotPolitcallyCorrect

Да, я вижу ваше замешательство. На самом деле Грифф пытается сказать: «Мы здесь не для того, чтобы делать вашу домашнюю работу или реальное рабочее задание для людей. Особенно, когда человек не приложил никаких усилий, чтобы сначала сделать свою работу». «Мы» означает сообщество CodeProject в целом. ОП не предпринял никаких усилий, чтобы попытаться сделать это сам, и вместо этого ожидает, что кто-то здесь сделает это за него. Большинство людей здесь знают, что выполнение людьми работы за них не «помогает» им ничем, кроме как научить их тому, что все, что нужно сделать, это прийти сюда, и кто-то сделает их работу за них. Затем они попадают в реальный мир, не могут выполнять свою работу и должны постоянно пытаться заставить других делать это за них. Я один из немногих счастливчиков, которые действительно оказались в этом положении, выполняя свою собственную работу, а затем вынужден был выполнять за них чужую работу, потому что они обманули свой путь в школе. Не самое веселое время.

George Swan

Я полностью согласен с вашими чувствами. Однако мой подход состоял бы в том, чтобы перейти к следующему вопросу, не выговаривая плакату, который действует в рамках правил форума. Было приятно поболтать с вами. С наилучшими пожеланиями, Джордж.

NotPolitcallyCorrect

На самом деле, IMO эта публикация нарушает "правило" № 2 FAQ. Он не является конкретным и не детализирует точно, в какой помощи нуждается ОП (за исключением того, что ОП считает, что мы должны делать его работу за него).