【发布时间】:2021-06-11 18:51:15
【问题描述】:
这是我的代码:
public static Point findRepeating(Integer arr[],int n)
{
// Point(return type) is a class having first and second as data memebres where first is number
// repeating and second is number of times it is repeating
if(arr[0] == arr[n-1]) // whole array has only one number
return new Point(arr[0],n);
int low = 0,high = n-1,mid = (low+high)/2, repNumber = 0;
while(high-low > 1) // in this loop only I'm trying to find the number that is repeating
{
mid = (low+high)/2;
if(arr[mid] == arr[mid-1] || arr[mid] == arr[mid+1])
{
repNumber = arr[mid];
break;
}
if((arr[low]+(mid-low)) == arr[mid])
low = mid+1;
else
high = mid;
}
int startIndex=0,endIndex=0;
// now I'll find the start and end index of the repeating number
// doing this by finding number just smaller and just larger than repeating number
if(repNumber == arr[0])
{
startIndex = 0;
endIndex = Arrays.binarySearch(arr,repNumber+1);
return new Point(repNumber,endIndex);
}
if(repNumber == arr[n-1])
{
endIndex = n-1;
startIndex = Arrays.binarySearch(arr,repNumber-1);
return new Point(repNumber,endIndex-startIndex);
}
else
{
startIndex = Arrays.binarySearch(arr,repNumber-1) + 1;
endIndex = Arrays.binarySearch(arr,repNumber+1);
return new Point(repNumber,endIndex-startIndex);
}
}
我的代码失败的测试用例是(整个输入不可见,因为它很大):
错误的答案。 !!!错误的答案
您的代码可能无法在多个测试用例 (TC) 中正常工作。
您的代码失败的第一个测试用例:
输入: 28566 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 48 49 45 7 51,57 58 59 60 60 91 97 98 99 100 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 15..................
它的正确输出是: 16932 10086
您的代码的输出是: 0 0
【问题讨论】:
-
它在我的机器上运行良好。也许您可以给我一些问题的提交链接,或者您的
Point类的实现可能有问题。 -
@risingStark 非常感谢您的回复。实际上,我已经购买了 Geeksforgeeks DSA 课程,因此您将无法访问该提交链接。请看上面的链接。它完全相似。只是参数是向量,而实际问题是整数数组,它的大小作为输入。顺便说一句,如果您可以访问,链接是practice.geeksforgeeks.org/problems/count-only-repeated2047/1/…。谢谢
-
您所说的链接无法访问。您可以首先尝试运行琐碎的测试用例,以查看代码对于这个特定的测试用例或任何测试用例是否失败。我想一定有一些自定义测试功能。在那里你可以输入琐碎的测试用例和这个测试用例。我有你的代码失败的test case。
-
@risingStark 是的,有自定义测试输入可用,但坦率地说,我不知道“琐碎的测试用例”是什么意思。就像检查一些我可以自己评估以与我的代码输出交叉检查的自定义输入和极端情况?另外,您是如何提取我的代码失败的测试用例的?是任何功能还是您观察到了预期的输出并生成了测试用例?
-
我生成了测试用例,因为给定了输入大小,所有元素都应该是连续的,并且给出了重复元素的信息。你对琐碎的测试用例是正确的,运行其中一些,看看你的代码是否按预期运行。
标签: arrays sorting data-structures binary-search array-algorithms