这是一个简单的函数,应该返回数组元素(整数)的总和。约束条件是,不应有负整数,每个元素的值应小于1000。
https://www.hackerrank.com/challenges/simple-array-sum/problem
.Touched
我编写的函数到此结束。其余代码与在Hackerrank上显示的一样
public class Solution {
static int simpleArraySum(int[] ar, int arCount) {
int res=0;
if(arCount>=0){
for (int i=0; i<=arCount; i++){
if (ar[i]<1000){
res += i;
}
}
}
return res;
}
对于输入6(数组大小)和1,2,3,4,10,11(数组元素),代码返回21而不是31。我不明白为什么这样做。 / strong>
答案 0 :(得分:2)
您正在汇总索引而不是元素。另外,如@Saikrishna Rajaraman所述,迭代到async function func() { .. }
为止。因此,在您的arCount
方法循环中进行更改:
simpleArraySum
收件人
for (int i=0; i < arCount; i++){
if (ar[i]<1000){
res += i;
}
}
此外,您不需要条件for (int i=0; i < arCount; i++){
if (ar[i]<1000){
res += ar[i];
}
}
,因为如果条件为负,则if(arCount>=0)
中的块将不会运行。
答案 1 :(得分:1)
有两个问题
请尝试以下解决方案。
static int simpleArraySum(int[] ar, int arCount) {
int res=0;
if(arCount>=0){ //can be ignored
for (int i=0; i<=arCount-1; i++){
if (ar[i]<1000){ // can be ignored
res += ar[i];
}
}
}
return res;
}
此外,约束条件还用于输入数组中的输入值。在运行测试用例时,hackerrank会照顾好它。您不必显式地将它们添加到您的代码中。
答案 2 :(得分:1)
因为您标记了java-8,所以我建议采用这种解决方案:
static int simpleArraySum(int[] ar) {// Note: not need to pass the length of the array
return Arrays.stream(ar)
.filter(i -> i >= 0 && i < 1000)
.sum();
}
您可以使用:
System.out.println(simpleArraySum(new int[]{1, 2, 3, 4, 10, 11}));//31
我也解决了HackerRank测试,并且得到了:
答案 3 :(得分:0)
如今,随着Java中流的可用性,每当编写手动循环时,您都应该真正考虑是否确实需要。在这种情况下,您可以使用单线解决方案完全避免该问题。
static int simpleArraySum(int[] ar) {
return Arrays.stream(ar).sum();
}
更少的代码,更少的错误机会,更少的调试时间。