Skip to content

Commit 45802ab

Browse files
新增题53最大子序和1解,更新NOTE内容
1 parent da2cf74 commit 45802ab

2 files changed

Lines changed: 28 additions & 0 deletions

File tree

Week_04/id_18/LeetCode_53_18.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,15 @@ public int maxSubArray(int[] nums) {
1919

2020
return result;
2121
}
22+
23+
public int maxSubArray1(int[] nums) {
24+
int result = nums[0];
25+
int sum = nums[0];
26+
for (int num: nums) {
27+
sum = Math.max(num, sum + num);
28+
result = Math.max(result, sum);
29+
}
30+
31+
return result;
32+
}
2233
}

Week_04/id_18/NOTE.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -759,6 +759,23 @@ class Solution {
759759
}
760760
}
761761
```
762+
#### 代码优化
763+
上述代码中,为了表示sum这个值是否对result有增益,所以做了条件判断。但是从另一个角度看,条件判断的过程就是判断当前元素加上sum值后是否有增益,如果没有,那么sum就需要重新初始化。所以只要比较当前元素和sum的大小,取大的就可以了。
764+
```java
765+
class Solution {
766+
public int maxSubArray(int[] nums) {
767+
int result = nums[0];
768+
int sum = 0;
769+
for (int num: nums) {
770+
sum = Math.max(num, sum + num);
771+
result = Math.max(result, sum);
772+
}
773+
774+
return result;
775+
}
776+
}
777+
```
778+
时间和空间都没有明显优化,但是代码变的干净且更加易于理解了。
762779
### 解法二
763780
#### 思路
764781

0 commit comments

Comments
 (0)