作为技术采访的准备,我在一个平台上练习Java问题,以达到这个特定目的.该平台有许多可见或隐藏的测试用例,我的解决方案通过了除五个隐藏用例中的两个以外的所有测试用例.在执行这些 case 时,平台会指出"已发生运行时异常",但提供了no additional information个.
我的问题是:what possible runtime exceptions can you spot in my code?
问题陈述
我得到的问题大致如下:
给定正整数nums
和正整数divisor
的列表(可能不是唯一的),找出两个不同索引i < j
的组合的数目,使得nums[i] + nums[j]
可被divisor
整除.
其他约束条件:
1 ≤ nums.length ≤ 10^5
1 ≤ nums[i] ≤ 10^9
1 ≤ divisor ≤ 10^9
Memory usage: 1GB
Runtime: 3 minutes
我的解决方案
我创建了以下解决方案来最小化运行时:
long solution(int[] nums, int divisor) {
long result = 0;
int[] remainderCount = new int[divisor];
Arrays.fill(remainderCount, 0);
for(int i = 0; i < nums.length; i++) {
int r = nums[i] % divisor;
if(r > 0) {
result += remainderCount[divisor - r];
} else {
result += remainderCount[0];
}
remainderCount[r] += 1;
}
return result;
}
总而言之,我正在试图找出我的代码可能会发生什么问题,以及如何防止这些问题或优化解决方案以不包括这些缺陷?
我花了一些时间试图通过基于约束创建输入数据来重现错误,但是程序从未遇到问题.我还研究了一些RuntimeException
,例如:
ArithmeticException
,NullPointerException
,ClassCastException
,ArrayIndexOutOfBoundsException
,NegativeArraySizeException
,ArrayStoreException
,UnsupportedOperationException
,NoSuchElementException
但在我看来,考虑到输入的限制,它们都不太可能.我不能理解这一点,所以任何和所有的指针是非常欢迎的!Thanks in advance:)