Skip to content

Commit

Permalink
Merge pull request #505 from vaskoz/day243
Browse files Browse the repository at this point in the history
Day243
  • Loading branch information
vaskoz committed Apr 24, 2019
2 parents 17842fb + 2128274 commit 348e922
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -254,4 +254,5 @@ problems from
* [Day 240](https://github.com/vaskoz/dailycodingproblem-go/issues/492)
* [Day 241](https://github.com/vaskoz/dailycodingproblem-go/issues/493)
* [Day 242](https://github.com/vaskoz/dailycodingproblem-go/issues/498)
* [Day 243](https://github.com/vaskoz/dailycodingproblem-go/issues/502)
* [Day 244](https://github.com/vaskoz/dailycodingproblem-go/issues/503)
33 changes: 33 additions & 0 deletions day243/problem.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package day243

// MinimizePartitionMaximumSum returns the smallest max sum of k-partitions.
func MinimizePartitionMaximumSum(nums []int, k int) int {
if k > len(nums) {
return 0
}
return minimizePartitionMaximumSum(nums, k)
}

func minimizePartitionMaximumSum(nums []int, k int) int {
if k == 1 {
var sum int
for _, v := range nums {
sum += v
}
return sum
}
minimumMax := int(^uint(0) >> 1)
for i := 1; i <= len(nums)-k+1; i++ {
var partitionSumMax int
for j := 0; j < i; j++ {
partitionSumMax += nums[j]
}
if minMax := minimizePartitionMaximumSum(nums[i:], k-1); minMax > partitionSumMax {
partitionSumMax = minMax
}
if partitionSumMax < minimumMax {
minimumMax = partitionSumMax
}
}
return minimumMax
}
41 changes: 41 additions & 0 deletions day243/problem_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package day243

import "testing"

var testcases = []struct {
nums []int
k int
sum int
}{
{[]int{5, 1, 2, 7, 3, 4}, 3, 8},
{[]int{3, 1, 1}, 3, 3},
{[]int{10, 1, 1}, 4, 0},
{[]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, 6, 11},
{[]int{5, 1, 2, 7, 3, 4}, 2, 14},
{[]int{5, 1, 2, 7, 3, 4}, 1, 22},
{[]int{89, 72, 92, 51, 34, 26, 51, 17, 32, 99}, 10, 99},
{[]int{89, 72, 92, 51, 34, 26, 51, 17, 32, 99}, 8, 99},
{[]int{89, 72, 92, 51, 34, 26, 51, 17, 32, 99}, 7, 99},
{[]int{89, 72, 92, 51, 34, 26, 51, 17, 32, 99}, 6, 111},
{[]int{89, 72, 92, 51, 34, 26, 51, 17, 32, 99}, 5, 143},
{[]int{89, 72, 92, 51, 34, 26, 51, 17, 32, 99}, 4, 161},
{[]int{89, 72, 92, 51, 34, 26, 51, 17, 32, 99}, 3, 203},
{[]int{89, 72, 92, 51, 34, 26, 51, 17, 32, 99}, 2, 304},
}

func TestMinimizePartitionMaximumSum(t *testing.T) {
t.Parallel()
for _, tc := range testcases {
if sum := MinimizePartitionMaximumSum(tc.nums, tc.k); sum != tc.sum {
t.Errorf("Expected %v, got %v", tc.sum, sum)
}
}
}

func BenchmarkMinimizePartitionMaximumSum(b *testing.B) {
for i := 0; i < b.N; i++ {
for _, tc := range testcases {
MinimizePartitionMaximumSum(tc.nums, tc.k)
}
}
}

0 comments on commit 348e922

Please sign in to comment.