From b3be6031be628730433ef0df235b12f72213d0c6 Mon Sep 17 00:00:00 2001 From: Dustin Pianalto Date: Tue, 1 Sep 2020 09:05:34 -0800 Subject: [PATCH] Problem 4 --- problem4.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 problem4.go diff --git a/problem4.go b/problem4.go new file mode 100644 index 0000000..4e04750 --- /dev/null +++ b/problem4.go @@ -0,0 +1,47 @@ +package main + +import ( + "log" + "math" +) + +func separate(s []int) int { + j := 0 + for i, val := range s { + if val <= 0 { + s[i] = s[j] + s[j] = val + j += 1 + } + } + return j +} + +func findMissingPositive(s []int) int { + l := len(s) + for _, val := range s { + fval := float64(val) + if int(math.Abs(fval)-1) < l && s[int(math.Abs(fval)-1)] > 0 { + s[int(math.Abs(fval)-1)] = -s[int(math.Abs(fval)-1)] + } + } + + for i, val := range s { + if val > 0 { + return i + 1 + } + } + return l + 1 +} + +func FindMissing(s []int) int { + shift := separate(s) + return findMissingPositive(s[shift:]) +} + +func main() { + s := []int{3, 4, -1, 1} + log.Println(FindMissing(s)) + s = []int{1, 2, 0} + log.Println(FindMissing(s)) +}