Skip to content

Commit 37f7323

Browse files
committed
数组四等分
1 parent 3f1cd15 commit 37f7323

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

src/Alibaba/ArrayDivide.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package Alibaba;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
/**
7+
* Created by liuyang on 17/3/3.
8+
* 阿里实习笔试题数组四等分,最后通过率80%
9+
*/
10+
public class ArrayDivide{
11+
static boolean resolve(int[] A) {
12+
if (A == null || A.length < 3) {
13+
return false;
14+
}
15+
int len = A.length;
16+
int[] sum = new int[len]; //当前位置累加和
17+
Map<Integer, Integer> map = new HashMap<>();//累加和对应的下标
18+
for (int i = 0; i < len; i++) {
19+
sum[i] = i != 0 ? sum[i - 1] + A[i] : A[i];
20+
map.put(sum[i], i);
21+
}
22+
int left = 0;
23+
int right = len - 1;
24+
while (left < right) {
25+
if (sum[left] < sum[len - 1] - sum[right - 1]) {
26+
left++;
27+
} else if (sum[left] > sum[len - 1] - sum[right - 1]) {
28+
right--;
29+
} else {
30+
int target = sum[left] + A[left + 1] + sum[left];
31+
if (map.containsKey(target)) {
32+
int mid = map.get(target);
33+
if (mid < right && sum[right - 2] - sum[mid + 1] == sum[left]) {
34+
return true;
35+
}
36+
}
37+
left++;
38+
}
39+
}
40+
return false;
41+
}
42+
43+
public static void main(String[] args) {
44+
int[] A = {2, 5, 1, 2, 1, 4, 1, 7, 3, 7};
45+
System.out.println(resolve(A));
46+
}
47+
}

0 commit comments

Comments
 (0)