Skip to content

Commit 0daa4da

Browse files
committed
minor fix
1 parent 037aec2 commit 0daa4da

File tree

2 files changed

+16
-19
lines changed

2 files changed

+16
-19
lines changed

integer_array/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
# Integer Array - 整数数组
1+
# Integer Array - 整型数组
22

3-
本章主要总结与整数数组相关的题
3+
本章主要总结与整型数组相关的题

integer_array/zero_sum_subarray.md

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -134,23 +134,22 @@ public:
134134
*/
135135
vector<int> subarraySum(vector<int> nums){
136136
vector<int> result;
137+
if (nums.empty()) {
138+
return result;
139+
}
137140

138-
int curr_sum = 0;
139-
vector<pair<int, int> > sum_i;
140-
sum_i.push_back(make_pair(0, 0));
141-
for (int i = 0; i != nums.size(); ++i) {
142-
curr_sum += nums[i];
143-
sum_i.push_back(make_pair(curr_sum, i + 1));
141+
const int num_size = nums.size();
142+
vector<pair<int, int> > sum_index(num_size + 1);
143+
for (int i = 0; i != num_size; ++i) {
144+
sum_index[i + 1].first = sum_index[i].first + nums[i];
145+
sum_index[i + 1].second = i + 1;
144146
}
145147

146-
// sort(sum_i.begin(), sum_i.end(), sort_pair_first());
147-
sort(sum_i.begin(), sum_i.end());
148-
for (int i = 1; i < sum_i.size(); ++i) {
149-
if (sum_i[i].first == sum_i[i - 1].first) {
150-
int min_index = min(sum_i[i - 1].second, sum_i[i].second);
151-
int max_index = max(sum_i[i - 1].second, sum_i[i].second) - 1;
152-
result.push_back(min_index);
153-
result.push_back(max_index);
148+
sort(sum_index.begin(), sum_index.end());
149+
for (int i = 1; i < num_size + 1; ++i) {
150+
if (sum_index[i].first == sum_index[i - 1].first) {
151+
result.push_back(sum_index[i - 1].second);
152+
result.push_back(sum_index[i].second - 1);
154153
return result;
155154
}
156155
}
@@ -162,9 +161,7 @@ public:
162161
163162
### 源码分析
164163
165-
没啥好分析的,注意好边界条件即可。按道理对`pair`排序后即为我们需要的排序结果,可以不必先求出`min_index`和`max_index`,即可直接用`sum_i[i - 1].second`代替`min_index`,`sum_i[i].second - 1`代替`max_index`,但实际运行发现先求得`min_index`和`max_index`反而更快!不适用`min()`和`max()`要1700ms,而用了`min()`和`max()`后反而只要1500ms !
166-
167-
这种排序的方法需要先求得所有子串和然后再排序,最后还需要遍历排序后的数组,效率自然是比不上哈希表。
164+
没啥好分析的,注意好边界条件即可。这里采用了链表中常用的「dummy」节点方法,`pair`排序后即为我们需要的排序结果。这种排序的方法需要先求得所有子串和然后再排序,最后还需要遍历排序后的数组,效率自然是比不上哈希表。但是在某些情况下这种方法有一定优势。
168165
169166
### 复杂度分析
170167

0 commit comments

Comments
 (0)