Java 计算给定整数元素数组中*{0,…,r}范围内整数的出现次数
由于某种原因,我的解决方案并不完整。我从隐藏的规格测试中得到了83/100 我的解决方案有什么问题?可能有一个我没有想到的用例 其他信息: 实现一个方法count,该方法给定一个整数元素数组,返回另一个数组,该数组包含输入数组中每个整数{0,…,r}的出现次数,其中r是一个整数,用于显示需要计数的整数的上边界 返回的计数数组大小为r+1,其中每个索引i处的元素对应于整数i的出现次数(i在{0,…,r}) 可以忽略输入数组中0到r整数范围之外的元素 例如,如果输入[0,8,1,3,1,3,10,3]的r为4,则输出应为[1,2,0,3,0] 如果输入数组为null或长度为0,则返回null 空间要求:方法count应该只为count数组使用额外的空间 时间要求:计数应在通过输入阵列的一次过程中计算Java 计算给定整数元素数组中*{0,…,r}范围内整数的出现次数,java,algorithm,Java,Algorithm,由于某种原因,我的解决方案并不完整。我从隐藏的规格测试中得到了83/100 我的解决方案有什么问题?可能有一个我没有想到的用例 其他信息: 实现一个方法count,该方法给定一个整数元素数组,返回另一个数组,该数组包含输入数组中每个整数{0,…,r}的出现次数,其中r是一个整数,用于显示需要计数的整数的上边界 返回的计数数组大小为r+1,其中每个索引i处的元素对应于整数i的出现次数(i在{0,…,r}) 可以忽略输入数组中0到r整数范围之外的元素 例如,如果输入[0,8,1,3,1,3,10,3
公共类计数重复{
/**
*计算范围内整数的出现次数
*给定整数元素数组中的{0,…,r}。返回
*计数数组:大小为r+1的新整数数组,其中
*索引i处的元素表示相等元素的出现次数
*到给定输入数组中的i(i位于{0,…,r})。
*如果输入数组为null或长度为0,则返回null。
*
*@param arr要计数的整数元素数组。
*@param r表示范围最后一个元素的整数。
*@返回一个新数组,其中包含每个
*输入数组中的整数{0,…,r}(索引i具有
*输入数组中等于i的元素计数,带i
*在{0,…,r})中
*/
公共静态int[]计数(int[]arr,int r){
//例外情况
//1.如果输入数组为null或长度为0,则返回null。
if(arr==null | | arr.length==0)返回null;
//正常情况
int[]结果=新的int[r+1];
对于(int x:arr)如果(x>=0&&x
如果(x>=0&&x=0。正如@kaya3所指出的那样
问题是r包含在范围内,因此x
x
应该是x@kaya3,这确实是问题所在。非常感谢。检查r>=0
是重新绑定的ant,因为如果其他两个条件为真,则传递性意味着它。因为这是代码的唯一问题,所以这个问题不属于主题,因为它是由打字错误引起的。例如,如果将r=-2传递给方法,它将尝试分配新的int[-1],但失败,问题说“返回的计数数组的大小将为r+1”因此,如果r=-2是一个可能的输入,那么问题本身就是错误的,因为它指定在这种情况下方法应该返回长度为-1的数组。好吧,我只是偏执:)如果(r<0)抛出新的IllegalArgumentException(“r为负”);看起来在线法官没有那么挑剔;基于基本相同的问题,你甚至不需要检查x>=0
就可以通过测试案例。
public class CountRepetitions {
/**
* Calculates the number of occurrences of integers from the range
* {0, ..., r} within a given array of integer elements. Returns
* the array of counts: a new array of integers of size r + 1, where the
* element at index i denotes the number occurrences of elements equal
* to i in the given input array (with i in {0, ..., r}).
* If the input array is null or of length 0, this will return null.
*
* @param arr the array of integer elements to be counted.
* @param r the integer indicating the last element of the range.
* @return a new array containing the number of occurrences of each
* integer {0, ..., r} in the input array (index i has the
* count of elements equal to i in the input array, with i
* in {0, ..., r})
*/
public static int[] count(int[] arr, int r) {
// Exceptional cases
// 1. If the input array is null or of length 0, this will return null.
if (arr == null || arr.length == 0) return null;
// Normal case
int[] result = new int[r + 1];
for (int x : arr) if (x >= 0 && x < r) result[x]++;
return result;
}