题目
给定一个整数数组。
返回一个数组,其中第一个元素是正数的个数,第二个元素是负数的总和。
如果输入数组为空或空,则返回一个空数组:
-
Java:
new int[] {}
/new int[0]
;
注意!
传递的数组不应该改变。在这里阅读更多。
例如:
input int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15}
return int[] {10, -65}.
测试用例:
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.runners.JUnit4;
public class KataTests {
@Test
public void countPositivesSumNegatives_BasicTest() {
int[] expectedResult = new int[] {10, -65};
assertArrayEquals(expectedResult, Kata.countPositivesSumNegatives(new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15}));
}
@Test
public void countPositivesSumNegatives_InputWithZeroes() {
int[] expectedResult = new int[] {8, -50};
assertArrayEquals(expectedResult, Kata.countPositivesSumNegatives(new int[] {0, 2, 3, 0, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14}));
}
}
解答
我的:
public class Kata{
public static int[] countPositivesSumNegatives(int[] input) {
if (input == null || input.length == 0) {
return new int[0];
}
int posNum = 0;
int negSum = 0;
for (int i : input) {
if (i > 0) {
posNum ++;
} else if (i < 0) {
negSum += i;
}
}
return new int[]{posNum, negSum};
}
}
别人的:
- 常规版
public class Kata
{
public static int[] countPositivesSumNegatives(int[] input)
{
if (input == null || input.length == 0) return new int[] {};
int count = 0,sum = 0;
for (int i : input) {
if (i > 0) count ++;
if (i < 0) sum += i;
}
return new int[] {count,sum};
}
}
这次我的和别人的差不多了。
- stream版
import java.util.stream.*;
public class Kata {
public static int[] countPositivesSumNegatives(int[] input) {
return input == null || input.length == 0 ?
new int[0] :
new int[] { (int)IntStream.of(input).filter(i->i>0).count(), IntStream.of(input).filter(i->i<0).sum() };
}
}
思考
学习别人好的编程思路很重要。