int[] arr;
public int[] threeEqualParts(int[] arr) {
this.arr = arr;
//求每个数中 1的数量
int cnt = 0;
int n = arr.length;
for (int v : arr) {
cnt += v;
}
if (cnt % 3 != 0) {
return new int[]{-1, -1};
}
if (cnt == 0) {
return new int[]{0, n - 1};
}
cnt /= 3;
//查找每个数第一个1的位置
int i = find(1), j = find(cnt + 1), k = find(cnt * 2 + 1);
//遍历判断后面每一位是否相等
for (; k < n && arr[i] == arr[j] && arr[j] == arr[k]; ++i, ++j, ++k) {}
return k == n ? new int[]{i - 1, j} : new int[]{-1, -1};//如果相同最后k一定遍历到n
}
private int find(int x) {
int s = 0;
for (int i = 0; i < arr.length; ++i) {
s += arr[i];
if (s == x) {
return i;
}
}
return 0;
}
2022.10.6-----leetcode.927
最新推荐文章于 2024-07-24 22:13:06 发布