File tree 6 files changed +154
-45
lines changed
solution/2200-2299/2270.Number of Ways to Split Array
6 files changed +154
-45
lines changed Original file line number Diff line number Diff line change 55
55
56
56
<!-- 这里可写通用的实现逻辑 -->
57
57
58
+ ** 方法一:前缀和**
59
+
58
60
<!-- tabs:start -->
59
61
60
62
### ** Python3**
64
66
``` python
65
67
class Solution :
66
68
def waysToSplitArray (self , nums : List[int ]) -> int :
67
- left, right = 0 , sum (nums)
68
- cnt = 0
69
+ s = sum (nums)
70
+ ans = t = 0
69
71
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
75
76
```
76
77
77
78
### ** Java**
@@ -81,18 +82,58 @@ class Solution:
81
82
``` java
82
83
class Solution {
83
84
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 ;
87
88
}
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;
92
95
}
93
96
}
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;
95
117
}
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
96
137
}
97
138
```
98
139
Original file line number Diff line number Diff line change @@ -57,36 +57,75 @@ There are two valid splits in nums:
57
57
``` python
58
58
class Solution :
59
59
def waysToSplitArray (self , nums : List[int ]) -> int :
60
- left, right = 0 , sum (nums)
61
- cnt = 0
60
+ s = sum (nums)
61
+ ans = t = 0
62
62
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
68
67
```
69
68
70
69
### ** Java**
71
70
72
71
``` java
73
72
class Solution {
74
73
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 ;
78
77
}
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;
83
84
}
84
85
}
85
- return cnt ;
86
+ return ans ;
86
87
}
87
88
}
88
89
```
89
90
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
+
90
129
### ** TypeScript**
91
130
92
131
``` ts
Original file line number Diff line number Diff line change
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 number Diff line number Diff line change
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 number Diff line number Diff line change 1
1
class Solution {
2
2
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 ;
6
6
}
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 ;
11
13
}
12
14
}
13
- return cnt ;
15
+ return ans ;
14
16
}
15
17
}
Original file line number Diff line number Diff line change 1
1
class Solution :
2
2
def waysToSplitArray (self , nums : List [int ]) -> int :
3
- left , right = 0 , sum (nums )
4
- cnt = 0
3
+ s = sum (nums )
4
+ ans = t = 0
5
5
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
You can’t perform that action at this time.
0 commit comments