最近面临一个以上问题的面试代码挑战。有一个人有他的森林,那里以行的形式种植树木。每行应以视觉上美观的方式包含一棵树。例如。如上图所示:

java - 使用Java编码质询问题查找并格式化森林中树木视觉上美观的令人愉悦的图案-LMLPHP

java - 使用Java编码质询问题查找并格式化森林中树木视觉上美观的令人愉悦的图案-LMLPHP

上面的树形图案永远不会在视觉上令人愉悦:
java - 使用Java编码质询问题查找并格式化森林中树木视觉上美观的令人愉悦的图案-LMLPHP

在这里,每一列代表行中的树及其高度。彼此之间不应有两棵树的高度相等,以使行在视觉上美观。
农场主希望所有树木在视觉上都美观。为此,他最多可以连续砍伐一棵树。找出可以砍成一棵树以使一排树变得美观的方法。

即使某行已经在视觉上美观,然后返回0作为函数的输出。

否则,即使在砍伐任何一棵树之后,也永远不可能将行形成为视觉上的美学图案;然后函数应该返回-1。

例如:
A [] = {3,4,5,3,7};
那么可以通过3种方式使它在视觉上具有美感:
删除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更快地工作吗?是否有某种数据结构的概念可以使此问题的解决方案在几分钟之内更容易解决,而不是我提出的冗长的解决方案?

最佳答案

public class Solution {

    public int solution(int[] a) {
        if (isAesthetic(a)) {
            return 0; //Edge Case completion for already aesthetic tree pattern.
        }

        int aestheticPatternCount = 0;
        for (int j = 0; j < a.length; j++) {
            int[] newA = copyArrayWithoutAnElement(a, j);
            if (isAesthetic(newA)) {
                aestheticPatternCount++;
            }
        }

        if (aestheticPatternCount == 0) {
            return -1;
        } else {
            return aestheticPatternCount;
        }
    }

    private int[] copyArrayWithoutAnElement(int[] array, int indexOfElementToBeRemoved) {
        int arrayLength = array.length;
        int[] newArr = new int[arrayLength - 1];
        int tempK = 0;
        for (int k = 0; k < arrayLength; k++) {
            if (k != indexOfElementToBeRemoved) {
                newArr[tempK++] = array[k];
            }
        }
        return newArr;
    }

    private boolean isAesthetic(int[] array) {
        int newArrayLength = array.length;
        int increasingFlag = 0;
        for (int i = 0; i < newArrayLength; i++) {
            if (increasingFlag == 0) {
                if (array[i] < array[i + 1]) {
                    increasingFlag = 1;
                } else {
                    increasingFlag = 2;
                }
            } else {
                if (increasingFlag == 1) {
                    if (i % 2 == 1 && array[i] > array[i - 1]) {

                    } else if (i % 2 == 0 && array[i] < array[i - 1]) {

                    } else {
                        return false;
                    }
                } else {
                    if (i % 2 == 1 && array[i] < array[i - 1]) {

                    } else if (i % 2 == 0 && array[i] > array[i - 1]) {

                    } else {
                        return false;
                    }
                }
            }
        }
        return true;
    }

    public static void main(String[] args) {
        Solution solutionObj = new Solution();
        int[] a1 = {1, 3, 1, 2};
        int[] a2 = {3, 4, 5, 3, 7};
        int[] a3 = {1, 2, 4, 4, 2, 5};
        System.out.println(solutionObj.solution(a1));
        System.out.println(solutionObj.solution(a2));
        System.out.println(solutionObj.solution(a3));
    }
}
这是我的解决方案。我们的相似。对?

09-28 01:11