Skip to content

Commit 9888c01

Browse files
committed
feat: add the solution of (053) with kotlin.
1 parent 05263da commit 9888c01

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
| [028][028-question] | [Implement strStr()][028-tips] | [][028-java] | | [][028-kotlin] |
4040
| [035][035-question] | [Search Insert Position][035-tips] | [][035-java] | | [][035-kotlin] |
4141
| [038][038-question] | [Count and Say][038-tips] | [][038-java] | | [][038-kotlin] |
42-
| [053][053-question] | [Maximum Subarray][053-tips] | [][053-java] | | |
42+
| [053][053-question] | [Maximum Subarray][053-tips] | [][053-java] | | [][053-kotlin] |
4343
| [058][058-question] | [Length of Last Word][058-tips] | [][058-java] | | |
4444
| [066][066-question] | [Plus One][066-tips] | [][066-java] | | |
4545
| [067][067-question] | [Add Binary][067-tips] | [][067-java] | | |
@@ -476,4 +476,5 @@
476476
[028-kotlin]: ./src/_028/kotlin/Solution.kt
477477
[035-kotlin]: ./src/_035/kotlin/Solution.kt
478478
[038-kotlin]: ./src/_038/kotlin/Solution.kt
479+
[053-kotlin]: ./src/_053/kotlin/Solution.kt
479480
[771-kotlin]: ./src/_771/kotlin/Solution.kt

src/_053/kotlin/Solution.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package _053.kotlin
2+
3+
/**
4+
* @author relish
5+
* @since 2018/04/17
6+
*/
7+
class Solution {
8+
fun maxSubArray(nums: IntArray): Int {
9+
val len = nums.size
10+
var max = nums[0]
11+
var dp = nums[0]
12+
for (i in 1 until len) {
13+
dp = Math.max(dp + nums[i], nums[i])
14+
max = Math.max(max, dp)
15+
}
16+
return max
17+
}
18+
}
19+
20+
fun main(args: Array<String>) {
21+
println(Solution().maxSubArray(intArrayOf(-2, 1, -3, 4, -1, 2, 1, -5, 4)))
22+
}

tips/053/README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ If you have figured out the O(*n*) solution, try coding another solution using t
1919

2020
题意是求数组中子数组的最大和,这种最优问题一般第一时间想到的就是动态规划,我们可以这样想,当部分序列和大于零的话就一直加下一个元素即可,并和当前最大值进行比较,如果出现部分序列小于零的情况,那肯定就是从当前元素算起。其转移方程就是 `dp[i] = nums[i] + (dp[i - 1] > 0 ? dp[i - 1] : 0);`,由于我们不需要保留 dp 状态,故可以优化空间复杂度为 1,即 `dp = nums[i] + (dp > 0 ? dp : 0);`
2121

22+
Java:
2223
```java
2324
class Solution {
2425
public int maxSubArray(int[] nums) {
@@ -32,10 +33,27 @@ class Solution {
3233
}
3334
```
3435

36+
kotlin(232ms/93.55%):
37+
```kotlin
38+
class Solution {
39+
fun maxSubArray(nums: IntArray): Int {
40+
val len = nums.size
41+
var max = nums[0]
42+
var dp = nums[0]
43+
for (i in 1 until len) {
44+
dp = Math.max(dp + nums[i], nums[i])
45+
max = Math.max(max, dp)
46+
}
47+
return max
48+
}
49+
}
50+
```
51+
3552
## 思路 1
3653

3754
题目也给了我们另一种思路,就是分治,所谓分治就是把问题分割成更小的,最后再合并即可,我们把 `nums` 一分为二先,那么就有两种情况,一种最大序列包括中间的值,一种就是不包括,也就是在左边或者右边;当最大序列在中间的时候那我们就把它两侧的最大和算出即可;当在两侧的话就继续分治即可。
3855

56+
Java:
3957
```java
4058
class Solution {
4159
public int maxSubArray(int[] nums) {

0 commit comments

Comments
 (0)