From 0dc94b0a49225ab33750938978dcc0edd95a1727 Mon Sep 17 00:00:00 2001 From: Azureki Date: Sat, 11 May 2019 10:41:11 +0800 Subject: [PATCH] go implementation. binary search --- .../split_array_largest_sum.go | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 410. Split Array Largest Sum/split_array_largest_sum.go diff --git a/410. Split Array Largest Sum/split_array_largest_sum.go b/410. Split Array Largest Sum/split_array_largest_sum.go new file mode 100644 index 0000000..4c90681 --- /dev/null +++ b/410. Split Array Largest Sum/split_array_largest_sum.go @@ -0,0 +1,47 @@ +package problem410 + +func max(nums ...int) int { + max := nums[0] + for _, x := range nums { + if x > max { + max = x + } + } + return max +} + +func sum(nums []int) int { + res := 0 + for _, x := range nums { + res += x + } + return res +} + +func split(nums []int, capacity int) int { + count := 1 + pack := 0 + for _, x := range nums { + pack += x + if pack > capacity { + pack = x + count++ + } + } + return count +} + +func splitArray(nums []int, m int) int { + left := max(nums...) + right := sum(nums) + var mid int + for left < right { + mid = (left + right) / 2 + if split(nums, mid) > m { + left = mid + 1 + } else { + right = mid + } + } + return left +}