Найдите и отформатируйте визуально приятный рисунок деревьев в лесу, используя java кодовый вопрос - PullRequest
0 голосов
/ 02 марта 2020

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

enter image description here

enter image description here

Выше рисунка дерева никогда не может быть визуально эстетически приятно: enter image description here

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

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

в противном случае, если есть вероятность, что ряд никогда не будет преобразован в визуально эстетический рисунок даже после обрезки какого-либо дерева; тогда функция должна вернуть -1.

например: A [] = {3, 4, 5, 3, 7}; тогда это можно сделать визуально эстетически тремя способами: удалить 3, A [] = {4, 5, 3, 7} еще удалить 4, A [] = {3, 5, 3, 7} еще удалить 5, A [ ] = {3, 4, 3, 7}, поэтому функция должна возвращать 3.

g. B [] = {1, 2, 3, 4, 2, 5}; Этот шаблон никогда не может быть визуально эстетичным, поэтому функция должна возвращать -1.

например. c [] = {1, 3, 1, 2}; этот шаблон уже визуально эстетически приятен, поэтому он должен возвращать 0.

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

1 Ответ

0 голосов
/ 02 марта 2020
class Solution {
static boolean canNotBeAesthetical = false;
public int solution(int[] A) {
    if(isAesthetical(A))
    {
        return 0;
    }
    else if(canNotBeAesthetical)
    {
        return -1;
    }
    else
    {
        int successfulToBeAestheticalCount=0;
        int[] newArray = new int [A.length-1];

        for(int i=0; i<A.length; i++) //element to remove each time
        {
            for(int k=0; k < i; k++)
            {
                newArray[k] = A[k];
            }
            for(int j=i+1; j<A.length; j++)
            {
                newArray[j-1]=A[j];
            }

            if(isAesthetical(newArray))
            {
                successfulToBeAestheticalCount++;
            }

        }

        return successfulToBeAestheticalCount;
    }
}

private boolean isAesthetical(int[] a) {
    int up=0;
    int down=0;
    int equal=0;
    int lastComparison = -2;
    int currentComparison = -2;
    boolean isAetheticalTillNow = false;

    for(int i = 0; (i < a.length-1) && (up<3 && down<3 && equal<3) ; i++)
    {
            if(heightComparison(a[i],a[i+1]) == 1)
            {
                up++;
                down=0;
                equal=0;
                currentComparison =1;

                if(lastComparison==-2) {
                    lastComparison =1;
                    isAetheticalTillNow = true;
                }
                else {
                    if(lastComparison!=currentComparison)
                    {
                        if(lastComparison==-1 && isAetheticalTillNow==true)
                        {
                            isAetheticalTillNow = true;
                        }
                        else
                        {
                            isAetheticalTillNow = false;
                        }

                    }
                    else
                    {
                        lastComparison = currentComparison;
                        isAetheticalTillNow = false;
                    }
                }

            }
            else if(heightComparison(a[i],a[i+1]) == 0)
            {
                equal++;
                up=0;
                down=0;
                isAetheticalTillNow = false;
                lastComparison = 0;
                currentComparison = 0;
            }
            else if(heightComparison(a[i],a[i+1]) == -1)
            {
                down++;
                up=0;
                equal=0;
                currentComparison = -1;

                if(lastComparison==-2) {
                    lastComparison = -1;
                    isAetheticalTillNow = true;
                }
                else {
                    if(lastComparison!=currentComparison)
                    {
                        if(lastComparison==1 && isAetheticalTillNow==true)
                        {
                            isAetheticalTillNow = true;
                            lastComparison = currentComparison;
                        }
                        else
                        {
                            isAetheticalTillNow = false;
                        }

                    }
                    else
                    {
                        lastComparison = currentComparison;
                        isAetheticalTillNow = false;
                    }

                }
            }
        }
    if(up>=3 || down>=3 || equal>=3)
    {
        canNotBeAesthetical = true;
        return false;
    }
    return isAetheticalTillNow;
}

private int heightComparison(int a, int b)
{
    if(a<b) { return 1;}
    else if(a==b) {return 0;}
    else return -1;
}

public static void main(String[] args) {
    Solution s = new Solution();
    int[] array = {3, 4, 5, 3, 7};
    int[] array2 = {1, 2, 3, 4, 2, 5};
    int[] array3 = {1, 3, 1, 2};
    System.out.println(s.solution(array));
    System.out.println(s.solution(array2));
    System.out.println(s.solution(array3));

}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...