我正在做关于协调性的练习。我已经花了两天时间解决这个问题,但分数没有得到改善。我的正确性得分为100%,但未通过一些性能测试,因为它返回了错误的答案(不是因为时间或空间复杂性)。我的错误结果总是少于预期的答案。有人能想到我需要添加我丢失的石头的情况吗?

这是提示:



这是我的解决方案:

 import java.util.*;

class Solution {
    public int solution(int[] H) {
        // write your code in Java SE 8

        LinkedList<Integer> stack = new LinkedList<Integer>();
        int count = 1;
        int lowest = H[0];
        stack.push(H[0]);

        if(H.length == 1){
            return 1;
        }
        else{
        for(int i = 1; i<H.length; i++){
            if(H[i] > H[i-1]){
                stack.push(H[i]);
                count++;
            }
            if(H[i] < lowest){
                while(stack.size() > 0){
                    stack.pop();
                }
                stack.push(H[i]);
                lowest = H[i];
                count++;
            }
            if(H[i] < H[i-1] && H[i] > lowest){
                while(stack.size() > 0 && stack.peek() > H[i]){
                    stack.pop();
                }
                if(stack.size() > 0 && stack.peek() < H[i]){
                    stack.push(H[i]);
                    count++;
                }
            }
        }
        }

        return count;
    }
}

最佳答案

可以发现的一个可能问题是,在H[i]==lowest时,对链表的管理不正确。当使用H[i]==lowest时,程序应仅用最低的一个块来重置链接列表。只需将第二个if块更正为:

if(H[i] <= lowest){
    while(stack.size() > 0){
        stack.pop();
    }
    stack.push(H[i]);
    if (H[i]!=lowest)
    {
        lowest = H[i];
        count++;
    }
}

考虑案例H = {1,4,3,4,1,4,3,4,1}。代码返回6时,正确的输出为7。

i is 6出现问题。第三个if块中的while循环将stack重置为{3,1},这导致即将到来的if块失败(stack.peek()= H [6] = 3)。

此外,由于H [i]的值仅对任何i都可以满足三个条件之一,因此可以将三个if块重写为if-else-if-else-if块。

关于java - 曼哈顿天际线封面未通过某些测试案例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26228432/

10-12 03:43
查看更多