zhedahht / CodingInterviewChinese2

《剑指Offer:名企面试官精讲典型编程面试题》第二版源代码
Other
5.32k stars 2.17k forks source link

面试题3的第二题测试案例不通过,可能一个重复的数字都找不出来 #54

Closed gyz147 closed 4 years ago

gyz147 commented 5 years ago

// 多个重复的数字 void test1() { int numbers[] = { 2, 2, 3, 3, 5, 5, 6, 6 }; int duplications[] = { 2, 3 }; test("test1", numbers, sizeof(numbers) / sizeof(int), duplications, sizeof(duplications) / sizeof(int)); } 这种情况,一个重复的数字都找不出来

ghost commented 5 years ago

附议,不知道是不是我审题有问题。

根本原因在于对于 [1, 1, 3, 4] 这种情况,1~4 这个区间里的数字仍然只有 4 个, 解法的基础就不成立了

JimWang97 commented 5 years ago

附议,不知道是不是我审题有问题。

根本原因在于对于 [1, 1, 3, 4] 这种情况,1~4 这个区间里的数字仍然只有 4 个, 解法的基础就不成立了

[1, 1, 3, 4]的数组长度是4, 只能选1~3区间内的数字

zhedahht commented 4 years ago

对于测试用例{ 2, 2, 3, 3, 5, 5, 6, 6 },书中的参考代码能够找出重复的数字5。gyz147的测试用例中的数组duplications不完整,导致运行测试结果不对。如果把duplications改成{2, 3, 5, 6},测试结果就堆了。对应的代码及其运行结果可以参考:https://ideone.com/u9d1J2

striver13的观点是正确的。根据题目的要求,长度为4的数组中数字的范围在1到3之间。当然,参考代码没有验证数字的范围,也不够严谨。