我正在做关于协调性的练习。我已经花了两天时间解决这个问题,但分数没有得到改善。我的正确性得分为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/