Skip to content

Commit 1647fc4

Browse files
authored
Improved task 805.
1 parent 4bb8bde commit 1647fc4

File tree

2 files changed

+22
-22
lines changed

2 files changed

+22
-22
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3078,7 +3078,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.12'
30783078
| 0808 |[Soup Servings](src.save/main/java/g0801_0900/s0808_soup_servings/Solution.java)| Medium | Dynamic_Programming, Math, Probability_and_Statistics | 1 | 96.04
30793079
| 0807 |[Max Increase to Keep City Skyline](src.save/main/java/g0801_0900/s0807_max_increase_to_keep_city_skyline/Solution.java)| Medium | Array, Greedy, Matrix | 2 | 23.49
30803080
| 0806 |[Number of Lines To Write String](src.save/main/java/g0801_0900/s0806_number_of_lines_to_write_string/Solution.java)| Easy | Array, String | 1 | 65.23
3081-
| 0805 |[Split Array With Same Average](src.save/main/java/g0801_0900/s0805_split_array_with_same_average/Solution.java)| Hard | Array, Dynamic_Programming, Math, Bit_Manipulation, Bitmask | 1323 | 22.41
3081+
| 0805 |[Split Array With Same Average](src.save/main/java/g0801_0900/s0805_split_array_with_same_average/Solution.java)| Hard | Array, Dynamic_Programming, Math, Bit_Manipulation, Bitmask | 1 | 100.00
30823082
| 0804 |[Unique Morse Code Words](src.save/main/java/g0801_0900/s0804_unique_morse_code_words/Solution.java)| Easy | Array, String, Hash_Table | 2 | 89.27
30833083
| 0803 |[Bricks Falling When Hit](src.save/main/java/g0801_0900/s0803_bricks_falling_when_hit/Solution.java)| Hard | Array, Matrix, Union_Find | 12 | 94.92
30843084
| 0802 |[Find Eventual Safe States](src.save/main/java/g0801_0900/s0802_find_eventual_safe_states/Solution.java)| Medium | Depth_First_Search, Breadth_First_Search, Graph, Topological_Sort, Graph_Theory_I_Day_9_Standard_Traversal | 7 | 74.93

src.save/main/java/g0801_0900/s0805_split_array_with_same_average/Solution.java

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,41 @@
11
package g0801_0900.s0805_split_array_with_same_average;
22

33
// #Hard #Array #Dynamic_Programming #Math #Bit_Manipulation #Bitmask
4-
// #2022_03_23_Time_1323_ms_(22.41%)_Space_42.1_MB_(78.14%)
4+
// #2022_08_19_Time_1_ms_(100.00%)_Space_41.6_MB_(95.76%)
55

66
import java.util.Arrays;
77

88
public class Solution {
9+
private int[] nums;
10+
private int[] sums;
11+
912
public boolean splitArraySameAverage(int[] nums) {
10-
int m = nums.length;
11-
int sum = 0;
12-
for (int n : nums) {
13-
sum += n;
13+
int len = nums.length;
14+
if (len == 1) {
15+
return false;
1416
}
1517
Arrays.sort(nums);
16-
for (int len = 1; len <= m / 2; len++) {
17-
if (sum * len % m == 0 && dfs(nums, sum * len / m, len, 0)) {
18+
sums = new int[len + 1];
19+
for (int i = 0; i < len; i++) {
20+
sums[i + 1] = sums[i] + nums[i];
21+
}
22+
int sum = sums[len];
23+
this.nums = nums;
24+
for (int i = 1, stop = len / 2; i <= stop; i++) {
25+
if ((sum * i) % len == 0 && findSum(i, len, (sum * i) / len)) {
1826
return true;
1927
}
2028
}
2129
return false;
2230
}
2331

24-
private boolean dfs(int[] nums, int sum, int len, int idx) {
25-
if (len == 0) {
26-
return sum == 0;
27-
}
28-
if (sum < 0 || idx >= nums.length) {
29-
return false;
30-
}
31-
if (nums[idx] > sum / len) {
32-
return false;
32+
private boolean findSum(int k, int pos, int target) {
33+
if (k == 1) {
34+
while (nums[--pos] > target) {}
35+
return nums[pos] == target;
3336
}
34-
for (int i = idx; i < nums.length; i++) {
35-
if (i > idx && nums[i] == nums[i - 1]) {
36-
continue;
37-
}
38-
if (dfs(nums, sum - nums[i], len - 1, i + 1)) {
37+
for (int i = pos; sums[i] - sums[i-- - k] >= target; ) {
38+
if (sums[k - 1] <= target - nums[i] && findSum(k - 1, i, target - nums[i])) {
3939
return true;
4040
}
4141
}

0 commit comments

Comments
 (0)