Skip to content

Commit debc8de

Browse files
committed
feat: add solutions to lc problem: No.2270
No.2270.Number of Ways to Split Array
1 parent 39f77ef commit debc8de

File tree

6 files changed

+154
-45
lines changed

6 files changed

+154
-45
lines changed

solution/2200-2299/2270.Number of Ways to Split Array/README.md

+56-15
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555

5656
<!-- 这里可写通用的实现逻辑 -->
5757

58+
**方法一:前缀和**
59+
5860
<!-- tabs:start -->
5961

6062
### **Python3**
@@ -64,14 +66,13 @@
6466
```python
6567
class Solution:
6668
def waysToSplitArray(self, nums: List[int]) -> int:
67-
left, right = 0, sum(nums)
68-
cnt = 0
69+
s = sum(nums)
70+
ans = t = 0
6971
for v in nums[:-1]:
70-
left += v
71-
right -= v
72-
if left >= right:
73-
cnt += 1
74-
return cnt
72+
t += v
73+
if t >= s - t:
74+
ans += 1
75+
return ans
7576
```
7677

7778
### **Java**
@@ -81,18 +82,58 @@ class Solution:
8182
```java
8283
class Solution {
8384
public int waysToSplitArray(int[] nums) {
84-
long[] pre = new long[nums.length + 1];
85-
for (int i = 0; i < nums.length; i++) {
86-
pre[i + 1] = pre[i] + nums[i];
85+
long s = 0;
86+
for (int v : nums) {
87+
s += v;
8788
}
88-
int cnt = 0;
89-
for (int i = 1; i < nums.length; i++) {
90-
if (pre[i] >= pre[nums.length] - pre[i]) {
91-
cnt++;
89+
int ans = 0;
90+
long t = 0;
91+
for (int i = 0; i < nums.length - 1; ++i) {
92+
t += nums[i];
93+
if (t >= s - t) {
94+
++ans;
9295
}
9396
}
94-
return cnt;
97+
return ans;
98+
}
99+
}
100+
```
101+
102+
### **C++**
103+
104+
```cpp
105+
class Solution {
106+
public:
107+
int waysToSplitArray(vector<int>& nums) {
108+
long long s = accumulate(nums.begin(), nums.end(), 0ll);
109+
long long t = 0;
110+
int ans = 0;
111+
for (int i = 0; i < nums.size() - 1; ++i)
112+
{
113+
t += nums[i];
114+
ans += t >= s - t;
115+
}
116+
return ans;
95117
}
118+
};
119+
```
120+
121+
### **Go**
122+
123+
```go
124+
func waysToSplitArray(nums []int) int {
125+
s := 0
126+
for _, v := range nums {
127+
s += v
128+
}
129+
ans, t := 0, 0
130+
for _, v := range nums[:len(nums)-1] {
131+
t += v
132+
if t >= s-t {
133+
ans++
134+
}
135+
}
136+
return ans
96137
}
97138
```
98139

solution/2200-2299/2270.Number of Ways to Split Array/README_EN.md

+54-15
Original file line numberDiff line numberDiff line change
@@ -57,36 +57,75 @@ There are two valid splits in nums:
5757
```python
5858
class Solution:
5959
def waysToSplitArray(self, nums: List[int]) -> int:
60-
left, right = 0, sum(nums)
61-
cnt = 0
60+
s = sum(nums)
61+
ans = t = 0
6262
for v in nums[:-1]:
63-
left += v
64-
right -= v
65-
if left >= right:
66-
cnt += 1
67-
return cnt
63+
t += v
64+
if t >= s - t:
65+
ans += 1
66+
return ans
6867
```
6968

7069
### **Java**
7170

7271
```java
7372
class Solution {
7473
public int waysToSplitArray(int[] nums) {
75-
long[] pre = new long[nums.length + 1];
76-
for (int i = 0; i < nums.length; i++) {
77-
pre[i + 1] = pre[i] + nums[i];
74+
long s = 0;
75+
for (int v : nums) {
76+
s += v;
7877
}
79-
int cnt = 0;
80-
for (int i = 1; i < nums.length; i++) {
81-
if (pre[i] >= pre[nums.length] - pre[i]) {
82-
cnt++;
78+
int ans = 0;
79+
long t = 0;
80+
for (int i = 0; i < nums.length - 1; ++i) {
81+
t += nums[i];
82+
if (t >= s - t) {
83+
++ans;
8384
}
8485
}
85-
return cnt;
86+
return ans;
8687
}
8788
}
8889
```
8990

91+
### **C++**
92+
93+
```cpp
94+
class Solution {
95+
public:
96+
int waysToSplitArray(vector<int>& nums) {
97+
long long s = accumulate(nums.begin(), nums.end(), 0ll);
98+
long long t = 0;
99+
int ans = 0;
100+
for (int i = 0; i < nums.size() - 1; ++i)
101+
{
102+
t += nums[i];
103+
ans += t >= s - t;
104+
}
105+
return ans;
106+
}
107+
};
108+
```
109+
110+
### **Go**
111+
112+
```go
113+
func waysToSplitArray(nums []int) int {
114+
s := 0
115+
for _, v := range nums {
116+
s += v
117+
}
118+
ans, t := 0, 0
119+
for _, v := range nums[:len(nums)-1] {
120+
t += v
121+
if t >= s-t {
122+
ans++
123+
}
124+
}
125+
return ans
126+
}
127+
```
128+
90129
### **TypeScript**
91130

92131
```ts
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public:
3+
int waysToSplitArray(vector<int>& nums) {
4+
long long s = accumulate(nums.begin(), nums.end(), 0ll);
5+
long long t = 0;
6+
int ans = 0;
7+
for (int i = 0; i < nums.size() - 1; ++i)
8+
{
9+
t += nums[i];
10+
ans += t >= s - t;
11+
}
12+
return ans;
13+
}
14+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
func waysToSplitArray(nums []int) int {
2+
s := 0
3+
for _, v := range nums {
4+
s += v
5+
}
6+
ans, t := 0, 0
7+
for _, v := range nums[:len(nums)-1] {
8+
t += v
9+
if t >= s-t {
10+
ans++
11+
}
12+
}
13+
return ans
14+
}
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
class Solution {
22
public int waysToSplitArray(int[] nums) {
3-
long[] pre = new long[nums.length + 1];
4-
for (int i = 0; i < nums.length; i++) {
5-
pre[i + 1] = pre[i] + nums[i];
3+
long s = 0;
4+
for (int v : nums) {
5+
s += v;
66
}
7-
int cnt = 0;
8-
for (int i = 1; i < nums.length; i++) {
9-
if (pre[i] >= pre[nums.length] - pre[i]) {
10-
cnt++;
7+
int ans = 0;
8+
long t = 0;
9+
for (int i = 0; i < nums.length - 1; ++i) {
10+
t += nums[i];
11+
if (t >= s - t) {
12+
++ans;
1113
}
1214
}
13-
return cnt;
15+
return ans;
1416
}
1517
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
class Solution:
22
def waysToSplitArray(self, nums: List[int]) -> int:
3-
left, right = 0, sum(nums)
4-
cnt = 0
3+
s = sum(nums)
4+
ans = t = 0
55
for v in nums[:-1]:
6-
left += v
7-
right -= v
8-
if left >= right:
9-
cnt += 1
10-
return cnt
6+
t += v
7+
if t >= s - t:
8+
ans += 1
9+
return ans

0 commit comments

Comments
 (0)