Подсказка для C #, а также головоломки SQL - PullRequest
3 голосов
/ 30 июня 2010

Я просматривал ТАКую работу и наткнулся на работу, в которой был PDF-файл с парой головоломок, которые они хотели, чтобы соискатели присылали.

Хотя я не заинтересован в работе, я все равно читаю вопросыи поиграл в Visual Studio / SMSS.Первый вопрос было довольно легко решить, хотя я не мог придумать, как его оптимизировать (я решил это в C #).Вторая загадка поражает только одно очевидное решение, и я не могу думать ни о каких других.

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

Вопросы находятся здесь: http://www.debtx.com/doc/DebtX_Programming_Problems.pdf

Я мог бы позволить первому скользить, но у второго естьМеня поставили в тупик на другие способы ее решения, кроме очевидных.Жаль, что на SO нет функции PM ...

Boilerplate решение для первой части C #:

public static bool Compare(int[] num, int[] div)
{
    for (int i = 0; i < num.Length; i++)
    {
        for (int j = 0; j < div.Length; j++)
        {
            if (num[i] % div[j] == 0)
                return true;
        }
    }

    return false;
}

My SQL Solutions

select Table1.Key1, Table1.Key2 from Table1 inner join Table2 on Table1.Key1 = Table2.key2 where IsDeleted=0

select * from Table1 where key1 in(select Key2 from Table2 where IsDeleted=0)

Все выглядит так жехотя

Ответы [ 4 ]

4 голосов
/ 30 июня 2010

пара примеров, использующих псевдо-SQL, чтобы не выдавать слишком много

Not In

   SELECT * FROM TBL1 
   WHERE NOT IN (
            SELECT FROM TBL2  
            WHERE Deleted=0 AND Tbl2.Key1= Tbl1.Key1 AND Tbl2.Key2=Tbl1.Key2
            )

Not Exists

    SELECT * FROM TBL1 
    WHERE NOT EXISTS (
        SELECT FROM TBL2 
        WHERE Deleted =0 AND Tbl2.Key1= Tbl1.Key1 AND Tbl2.Key2=Tbl1.Key2
        ) 

Outter Join is Null

    SELECT * FROM TBL1 LEFT JOIN TBL2 
    WHERE TBL2.Key1 IS NULL OR Deleted=0
2 голосов
/ 30 июня 2010

Одной из оптимизаций вопроса C # является сортировка массива DIV. Скорее всего, вы быстро найдете совпадение, начиная с меньших чисел.

РЕДАКТИРОВАТЬ: Другая оптимизация вопроса C # может заключаться в том, чтобы взглянуть на подход, аналогичный простому числу Сито Эратосфена общая теория заключается в том, что вы упреждаете некоторые результаты без необходимости выполнять проверки.

Что касается вопроса SQL, три очевидных (распространенных) способа, как другие заявили, - это JOIN, IN и EXISTS.

1 голос
/ 30 июня 2010

Спойлер оповещения !!!!!
















SELECT
     T1.key1,
     T1.key2
FROM
    Table1 T1
WHERE
    NOT EXISTS
    (
        SELECT *
        FROM
            Table2 T2
        WHERE
            T2.key1 = T1.key1 AND
            T2.key2 = T1.key2 AND
            COALESCE(T2.IsDeleted, 0) <> 1
    )

SELECT
     T1.key1,
     T1.key2
FROM
    Table1 T1
LEFT OUTER JOIN Table2 T2 ON
    T2.key1 = T1.key1 AND
    T2.key2 = T1.key2 AND
    COALESCE(T2.IsDeleted, 0) <> 1
WHERE
    T2.key1 IS NULL

SELECT
     T1.key1,
     T1.key2
FROM
    Table1 T1
WHERE
    (
        SELECT COUNT(*)
        FROM
            Table2 T2
        WHERE
            T2.key1 = T1.key1 AND
            T2.key2 = T1.key2 AND
            COALESCE(T2.IsDeleted, 0) <> 1
    ) = 0
1 голос
/ 30 июня 2010

Ну какое решение вы уже использовали? Сразу думаю, что это можно сделать, используя подзапрос с IN, используя LEFT OUTER JOIN и фильтруя по NULL, или используя EXISTS.

...