Қош келдім)))

Блог аты dosbol
Assalamualeikum,
Блогты көріп қуанып қалдым, бастап IT-ға қатысы бар бауырлардың бір конференцияда бас қосуын озім ұсынған ем(helpdesk, білетін адам түсінеді). Даулеттін есебі біраз шешімсіз тұрған екен, шешімін талқылау қызық деп ойлаймын, және мүмкін Дәке жауабын да айтар…
Ереке, Анау-мынауын өзіңіз түзеп қоясыз ғо

Коріп қалып тездетіп шешіп тастағым келді. « Бул есеп оптимизацияга арналмаган, просто логикага, маныздысы дурыс шыкса болды :) » деген соң онай жолынан бастадым.
«Агаштын мандерин 2 олшемди массив туринде беруге болады» делінген, бірақ мен 1 өлшеммен алдым. Бірінші баған ретінде индекс кетеді.




public class DauletsTree {

    int arrRecIndex;

    void function(int a, int[] arr, int[] arrRec) {
        if (a == 1) {
            return;
        } else {
            arrRecIndex++;
            arrRec[arrRecIndex] = arr[a];
            function(arr[a], arr, arrRec);
        }
        return;
    }

    void fillPathUntilRoot(int child, int[] arr, int[] arrRec) {
        arrRecIndex = 0;
        arrRec[0] = child;
        function(child, arr, arrRec);
    }

    public static void main(String[] args) {
        
        int[] arr = new int[13];
        arr[0] = -1;        arr[1] = 0;         arr[2] = 1;         arr[3] = 2;        
        arr[4] = 3;        arr[5] = 3;        arr[6] = 2;        arr[7] = 1;        
        arr[8] = 1;  arr[9] = 8;  arr[10] = 9;  arr[11] = 9;    arr[12] = 8;
        int[] arrRec1 = new int[13];
        int[] arrRec2 = new int[13];
        DauletsTree dt = new DauletsTree();
        dt.fillPathUntilRoot(3, arr, arrRec1);
        dt.fillPathUntilRoot(7, arr, arrRec2);
        int firstindex = 0;
        int secondIndex = 0;
        outer:
        for (int i = 0; i < arrRec1.length; i++) {
            for (int j = 0; j < arrRec2.length; j++) {
                if (arrRec2[j] == 0) {
                    continue outer;
                }
                if (arrRec1[i] == 0) {
                    break outer;
                }
                if (arrRec1[i] == arrRec2[j]) {
                    firstindex = i;
                    secondIndex = j;
                    break outer;
                }
            }
        }
        System.out.println(firstindex + secondIndex);
    }
}


3,7 арасындағы жолды табу үшін 2 массивті 2 нүктеден түбірге дейн толтырады. Мысалы, 3 үшін: 3-2-1, 7 үшін 7-1. Және осы екі массивтен ең кіші жолды табады.

Бірақ бұл шешім жайлы Дәкең мынаны айтты «Ия брат, дурыс, бирак оте неоптимально :).Егер 4 пен 5 енгизсем, кореньге дейин циклди орындау кажет емес болатын.»

Келесі постта: таза рекурсиямен қалай шығарғанымды және қандай қате кездескенін жазуға тырысамын

1 пікір

avatar
Ия, әрине, түзеп жүреміз ғой. Тағы қош келдің!) Есеп қызық екен, қазір сәл босасам тек қарайтын…
Тек қана тіркелген және авторизациядан өткен қолданушылар пікір қалдыра алады.