Given an array A
of positive integers, let S
be the sum of the digits of the minimal element of A
.
Return 0 if S
is odd, otherwise return 1.
Example 1:
Input: [99,77,33,66,55] Output: 1 Explanation: The minimal element is 33, and the sum of those digits is S = 3 + 3 = 6 which is even, so the answer is 1.
Note:
1 <= A.length <= 100
1 <= A[i].length <= 100
Approach #1 Integer.toString() 我的解法
class Solution {
public int sumOfDigits(int[] A) {
int min = A[0];
for(int i:A){
if(i<min){
min = i;
}
}
String min_str = Integer.toString(min);
int sum = 0;
for(int i=0;i<min_str.length();i++){
sum += (int)min_str.charAt(i);
}
if(sum%2==1)
return 0;
else
return 1;
}
}
分析
比较啰嗦,但是容易理解。
时间复杂度:O(n+n)
Approach #2 Array.stream().min().getAsInt()
public int sumOfDigits(int[] A) {
int min = Arrays.stream(A).min().getAsInt();
int ans = 0;
while (min > 0) {
ans += min % 10;
min /= 10;
}
return 1 - ans % 2;
}
知识点:
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。
构造stream的常用方法:
// 1. Individual values
Stream stream = Stream.of("a", "b", "c");
// 2. Arrays
String [] strArray = new String[] {"a", "b", "c"};
stream = Stream.of(strArray);
stream = Arrays.stream(strArray);
// 3. Collections
List<String> list = Arrays.asList(strArray);
stream = list.stream();
除这里用到的min()之外,其他常用的method
Arrays.stream(arr).max();
Arrays.stream(arr).min();
Arrays.stream(arr).sum();
Arrays.stream(arr).average();
Arrays.stream(arr).count();
Arrays.stream(arr).distinct();
Arrays.stream(arr).findFirst();