Skip to content

Commit beae683

Browse files
committed
[E:59/533, M:57/974, H:6/387] add No: 561 Array Partition I
1 parent 4b52444 commit beae683

File tree

9 files changed

+357
-1
lines changed

9 files changed

+357
-1
lines changed

questions/serial/简单/561/README.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
## [数组拆分 I](https://leetcode-cn.com/problems/array-partition-i/)
2+
3+
给定长度为 `2n`****的整数数组 `nums` ,你的任务是将这些数分成 `n` **** 对, 例如 `(a
4+
1
5+
, b
6+
1
7+
), (a
8+
2
9+
, b
10+
2
11+
), ..., (a
12+
n
13+
, b
14+
n
15+
)` ,使得从 `1` 到 `n``min(a
16+
i
17+
, b
18+
i
19+
)` 总和最大。
20+
21+
返回该 **最大总和**
22+
23+
 
24+
25+
**示例 1:**
26+
27+
`
28+
**输入:**nums = [1,4,3,2]
29+
**输出:**4
30+
**解释:**所有可能的分法(忽略元素顺序)为:
31+
1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3
32+
2. (1, 3), (2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 3
33+
3. (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4
34+
所以最大总和为 4`
35+
36+
**示例 2:**
37+
38+
`
39+
**输入:**nums = [6,2,6,5,1,2]
40+
**输出:**9
41+
**解释:**最优的分法为 (2, 1), (2, 5), (6, 6). min(2, 1) + min(2, 5) + min(6, 6) = 1 + 2 + 6 = 9
42+
`
43+
44+
 
45+
46+
**提示:**
47+
48+
* `1
49+
4
50+
`
51+
* `nums.length == 2 * n`
52+
* `-10
53+
4
54+
55+
4
56+
`
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"reflect"
7+
"time"
8+
9+
"github.com/gladmo/leetcode/leet"
10+
"github.com/gladmo/leetcode/questions/serial/简单/561/golang/solution"
11+
)
12+
13+
func main() {
14+
/*
15+
16+
[1,4,3,2]
17+
18+
*/
19+
20+
tests := []struct {
21+
name string
22+
input []int
23+
want int
24+
}{
25+
{
26+
name: "test-[1,4,3,2]",
27+
input: []int{1, 4, 3, 2},
28+
want: 4,
29+
},
30+
{
31+
name: "test-[6,2,6,5,1,2]",
32+
input: []int{6, 2, 6, 5, 1, 2},
33+
want: 9,
34+
},
35+
}
36+
37+
testLog := leet.NewTestLog(len(tests))
38+
defer testLog.Render()
39+
40+
timeoutDuration := time.Second * 2
41+
42+
for idx, test := range tests {
43+
// 超时检测
44+
got := test.want
45+
timeout := leet.Timeout(timeoutDuration, func(ctx context.Context, cancel context.CancelFunc) {
46+
got = solution.Export(test.input)
47+
cancel()
48+
})
49+
50+
if timeout {
51+
testLog.Fail(idx+1, test.name, "timeout")
52+
continue
53+
}
54+
55+
if !reflect.DeepEqual(test.want, got) {
56+
testLog.Fail(idx+1, test.name, fmt.Sprintf("want: %v, got %v.", test.want, got))
57+
continue
58+
}
59+
60+
testLog.Pass(idx+1, test.name)
61+
}
62+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package solution
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"runtime/debug"
7+
)
8+
9+
func Export(nums []int) int {
10+
defer func() {
11+
if r := recover(); r != nil {
12+
fmt.Println("Params: ", nums)
13+
fmt.Println("Panic:", r)
14+
fmt.Println()
15+
debug.PrintStack()
16+
os.Exit(0)
17+
}
18+
}()
19+
20+
return arrayPairSum(nums)
21+
}
22+
23+
/****************************************************/
24+
/******** 以下为 Leetcode 示例部分(提交PR请还原) *******/
25+
/******** 使用 (./leetcode clear) 初始化所有问题 *******/
26+
/****************************************************/
27+
28+
func arrayPairSum(nums []int) int {
29+
30+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package solution
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"runtime/debug"
7+
)
8+
9+
func Export(nums []int) int {
10+
defer func() {
11+
if r := recover(); r != nil {
12+
fmt.Println("Params: ", nums)
13+
fmt.Println("Panic:", r)
14+
fmt.Println()
15+
debug.PrintStack()
16+
os.Exit(0)
17+
}
18+
}()
19+
20+
return arrayPairSum(nums)
21+
}
22+
23+
/****************************************************/
24+
/******** 以下为 Leetcode 示例部分(提交PR请还原) *******/
25+
/******** 使用 (./leetcode clear) 初始化所有问题 *******/
26+
/****************************************************/
27+
28+
func arrayPairSum(nums []int) int {
29+
30+
}

questions/store.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
## [数组拆分 I](https://leetcode-cn.com/problems/array-partition-i/)
2+
3+
给定长度为 `2n`****的整数数组 `nums` ,你的任务是将这些数分成 `n` **** 对, 例如 `(a
4+
1
5+
, b
6+
1
7+
), (a
8+
2
9+
, b
10+
2
11+
), ..., (a
12+
n
13+
, b
14+
n
15+
)` ,使得从 `1` 到 `n``min(a
16+
i
17+
, b
18+
i
19+
)` 总和最大。
20+
21+
返回该 **最大总和**
22+
23+
 
24+
25+
**示例 1:**
26+
27+
`
28+
**输入:**nums = [1,4,3,2]
29+
**输出:**4
30+
**解释:**所有可能的分法(忽略元素顺序)为:
31+
1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3
32+
2. (1, 3), (2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 3
33+
3. (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4
34+
所以最大总和为 4`
35+
36+
**示例 2:**
37+
38+
`
39+
**输入:**nums = [6,2,6,5,1,2]
40+
**输出:**9
41+
**解释:**最优的分法为 (2, 1), (2, 5), (6, 6). min(2, 1) + min(2, 5) + min(6, 6) = 1 + 2 + 6 = 9
42+
`
43+
44+
 
45+
46+
**提示:**
47+
48+
* `1
49+
4
50+
`
51+
* `nums.length == 2 * n`
52+
* `-10
53+
4
54+
55+
4
56+
`
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"reflect"
7+
"time"
8+
9+
"github.com/gladmo/leetcode/leet"
10+
"github.com/gladmo/leetcode/questions/serial/简单/561/golang/solution"
11+
)
12+
13+
func main() {
14+
/*
15+
16+
[1,4,3,2]
17+
18+
*/
19+
20+
tests := []struct {
21+
name string
22+
input []int
23+
want int
24+
}{
25+
{
26+
name: "test-[1,4,3,2]",
27+
input: []int{1, 4, 3, 2},
28+
want: 4,
29+
},
30+
{
31+
name: "test-[6,2,6,5,1,2]",
32+
input: []int{6, 2, 6, 5, 1, 2},
33+
want: 9,
34+
},
35+
}
36+
37+
testLog := leet.NewTestLog(len(tests))
38+
defer testLog.Render()
39+
40+
timeoutDuration := time.Second * 2
41+
42+
for idx, test := range tests {
43+
// 超时检测
44+
got := test.want
45+
timeout := leet.Timeout(timeoutDuration, func(ctx context.Context, cancel context.CancelFunc) {
46+
got = solution.Export(test.input)
47+
cancel()
48+
})
49+
50+
if timeout {
51+
testLog.Fail(idx+1, test.name, "timeout")
52+
continue
53+
}
54+
55+
if !reflect.DeepEqual(test.want, got) {
56+
testLog.Fail(idx+1, test.name, fmt.Sprintf("want: %v, got %v.", test.want, got))
57+
continue
58+
}
59+
60+
testLog.Pass(idx+1, test.name)
61+
}
62+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package solution
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"runtime/debug"
7+
)
8+
9+
func Export(nums []int) int {
10+
defer func() {
11+
if r := recover(); r != nil {
12+
fmt.Println("Params: ", nums)
13+
fmt.Println("Panic:", r)
14+
fmt.Println()
15+
debug.PrintStack()
16+
os.Exit(0)
17+
}
18+
}()
19+
20+
return arrayPairSum(nums)
21+
}
22+
23+
/****************************************************/
24+
/******** 以下为 Leetcode 示例部分(提交PR请还原) *******/
25+
/******** 使用 (./leetcode clear) 初始化所有问题 *******/
26+
/****************************************************/
27+
28+
func arrayPairSum(nums []int) int {
29+
30+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package solution
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"runtime/debug"
7+
)
8+
9+
func Export(nums []int) int {
10+
defer func() {
11+
if r := recover(); r != nil {
12+
fmt.Println("Params: ", nums)
13+
fmt.Println("Panic:", r)
14+
fmt.Println()
15+
debug.PrintStack()
16+
os.Exit(0)
17+
}
18+
}()
19+
20+
return arrayPairSum(nums)
21+
}
22+
23+
/****************************************************/
24+
/******** 以下为 Leetcode 示例部分(提交PR请还原) *******/
25+
/******** 使用 (./leetcode clear) 初始化所有问题 *******/
26+
/****************************************************/
27+
28+
func arrayPairSum(nums []int) int {
29+
30+
}

0 commit comments

Comments
 (0)