y*****3 发帖数: 451 | 1 Recover Binary Search Tree那道题,自己没想出来,在网上看的别人的思路,自己再
写一下,基本上和人家写的一模一样的,在Eclipse上测试都没有问题,但是OJ就通
过不了:
Wrong Answer:
Input: {2,#,1}
Output: {2,#,0}
Expected: {1,#,2}
可是这个test case我在Eclipse上测试都没有问题啊!!!请大牛们给看看到底是哪儿
写错了?leetcode不该这么不靠谱吧???
public class Solution {
TreeNode badNode1 = null;
TreeNode badNode2 = null;
TreeNode prev = null;
public void recoverTree(TreeNode root) {
if (root != null && (root.left != null || root.right != null) )
{
inOrderTraversal(root);
int temp = badNode1.val;
badNode1.val = badNode2.val;
badNode2.val = temp;
}
}
public void inOrderTraversal(TreeNode root)
{
if (root == null)
{
return;
}
inOrderTraversal(root.left);
if (prev != null && prev.val > root.val)
{
if (badNode1 == null)
{
badNode1 = prev;
badNode2 = root;
}
else
{
badNode2=root;
}
}
prev = root;
inOrderTraversal(root.right);
}
} |
j*******t 发帖数: 223 | 2 Wrong Answer:
Input: {2,#,1}
Output: {2,#,0}
Expected: {1,#,2}
貌似你把树中的值都改了,本来有1,2,现在变成0,2了。 |
x*******8 发帖数: 145 | 3 correct me if I'm wrong. 有几次用static field 去做也会有bug,然后改成
ArrayList作为参数带入,就过了,不知道是不是bug。这题你可以用一个ArrayList来
记录错误的node,然后最后调换list中的value。 |
y*****3 发帖数: 451 | 4 不是我改的,是OJ出错了。
【在 j*******t 的大作中提到】 : Wrong Answer: : Input: {2,#,1} : Output: {2,#,0} : Expected: {1,#,2} : 貌似你把树中的值都改了,本来有1,2,现在变成0,2了。
|
y*****3 发帖数: 451 | 5 谢谢!你说的这种版本我也试过,报一样的错误。但我用Eclipse测试都没有问题。
【在 x*******8 的大作中提到】 : correct me if I'm wrong. 有几次用static field 去做也会有bug,然后改成 : ArrayList作为参数带入,就过了,不知道是不是bug。这题你可以用一个ArrayList来 : 记录错误的node,然后最后调换list中的value。
|
I**********s 发帖数: 441 | 6 // IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
在public void recoverTree(TreeNode root) {}开始加上这一句就可以了:
badNode1 = badNode2 = prev = null; |
y*****3 发帖数: 451 | 7 哈哈,还真是这个问题。谢谢!
【在 I**********s 的大作中提到】 : // IMPORTANT: Please reset any member data you declared, as : // the same Solution instance will be reused for each test case. : 在public void recoverTree(TreeNode root) {}开始加上这一句就可以了: : badNode1 = badNode2 = prev = null;
|
w********g 发帖数: 106 | 8 我已经在本版看过几十次这样的问题了:leetcode有bug?
几乎每次都是因为Solution的class member在用过以后没reset。
【在 y*****3 的大作中提到】 : Recover Binary Search Tree那道题,自己没想出来,在网上看的别人的思路,自己再 : 写一下,基本上和人家写的一模一样的,在Eclipse上测试都没有问题,但是OJ就通 : 过不了: : Wrong Answer: : Input: {2,#,1} : Output: {2,#,0} : Expected: {1,#,2} : 可是这个test case我在Eclipse上测试都没有问题啊!!!请大牛们给看看到底是哪儿 : 写错了?leetcode不该这么不靠谱吧??? : public class Solution {
|
A**d 发帖数: 13310 | 9 a minor detail: why do you make your helper function public?
【在 y*****3 的大作中提到】 : 哈哈,还真是这个问题。谢谢!
|
g*********e 发帖数: 14401 | 10
that's doesn't matter, no one cares
【在 A**d 的大作中提到】 : a minor detail: why do you make your helper function public?
|
f*******t 发帖数: 7549 | 11 三哥可以拿这个拒你。所以细节一定要做好
【在 g*********e 的大作中提到】 : : that's doesn't matter, no one cares
|
y*****3 发帖数: 451 | 12 嗯记住了,谢谢!
【在 f*******t 的大作中提到】 : 三哥可以拿这个拒你。所以细节一定要做好
|
d*****1 发帖数: 263 | 13 帮人问一下,trapping water这道题。
没有static 变量啊, 所有的变量,都reset了。
还是有case通不过啊(我看了半天,也没给他看出来。)
楼上有人遇到过吗?
public class Solution {
public int trap(int[] A) {
// use stack to find
if (A == null || A.length == 0) {
return 0;
}
// find a concave
int left = 0, right=0;
int sumOfWater = 0;
while (left < A.length) {
// assume left is the left barriar
right = left + 1;
boolean findLowerBar = false;
boolean findHigherBar = false;
while (right < A.length && A[right] < A[left]) {
right++;
findLowerBar = true;
}
right--; // point to the most smallest
if (findLowerBar == false || right == A.length-1 ) { // the next
-right bar is too high
left++;
continue;
}
// Now findLowerBar == true; and we do not exceed the right
end of array
while (right +1 < A.length) {
if (A[right+1] >= A[right]) {
right++;
findHigherBar = true;
} else {
break;
}
}
if (findHigherBar == false) {// do not find the right bar, coz
we reach the end
break;
}
// now left and right hold some water
int totalBarBulk = 0;
for (int i = left + 1; i < right; i++) {
totalBarBulk += A[i];
}
sumOfWater += (Math.min(A[left], A[right]) * (right - left - 1)
- totalBarBulk);
left = right;
}
return sumOfWater;
}
} |