Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions exercises/fibonacci/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package main

import (
"fmt"
)

func fibonacci(n, n1, n2 int) {
if n == 0 {
return
}
fmt.Printf("%v ", n2)
fibonacci(n-1, n2, n1+n2)
}

func main() {
fibonacci(1, 0, 1)
fmt.Println()
fibonacci(2, 0, 1)
fmt.Println()
fibonacci(3, 0, 1)
fmt.Println()
fibonacci(4, 0, 1)
fmt.Println()
fibonacci(5, 0, 1)
fmt.Println()
fibonacci(6, 0, 1)
fmt.Println()
fibonacci(7, 0, 1)
}

// Time complexity: O(n)
// Space complexity: O(n)
17 changes: 17 additions & 0 deletions exercises/isPowerOf2/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package main

import "fmt"

func isPowerOf2(n int) {
if n%2 == 1 && n != 1 {
fmt.Println("NO")
return
} else if n == 1 {
fmt.Println("YES")
return
}
isPowerOf2(n / 2)
}

// Time complexity: O(log(n))
// Space complexity: O(log(n))
21 changes: 21 additions & 0 deletions exercises/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package main

func rearrange(s []int, pivot int) (i int) {
l, r, p := 0, len(s)-1, s[pivot]
for {
for s[l] < p {
l++
}
for s[r] > p {
r--
}
if l >= r {
return r
}
if s[l] != s[r] {
s[l], s[r] = s[r], s[l]
} else {
r--
}
}
}
34 changes: 34 additions & 0 deletions exercises/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package main

import (
"testing"
)

func TestRearrange(t *testing.T) {
for _, tc := range []struct {
name string
s []int
pivot int
want int
}{
{"no repeated elements", []int{8, 4, 1, 0, 5, 9, 3, 7, 2, 6}, 4, 5},
{"repeated elements", []int{9, 6, 1, 7, 5, 9, 6, 5, 2, 6}, 9, 4},
{"empty left side", []int{9, 6, 1, 7, 5, 9, 6, 5, 2, 0}, 9, 0},
Comment on lines +14 to +16
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add more tests (not only given examples).

} {
t.Run(tc.name, func(t *testing.T) {
got := rearrange(tc.s, tc.pivot)
areLess(tc.s[:got], tc.s[got], t)
if got != tc.want {
t.Errorf("got = %v, want = %v", got, tc.want)
}
})
}
}

func areLess(s []int, p int, t *testing.T) {
for _, e := range s {
if e > p {
t.Errorf("%v > %v", e, p)
}
}
}
21 changes: 21 additions & 0 deletions exercises/maxNumber/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package main

import (
"fmt"
)

func max(s []int, i, max1, max2 int) {
if i == len(s) {
fmt.Println(max1, max2)
return
}
if max2 < s[i] && s[i] <= max1 {
max2 = s[i]
} else if max1 < s[i] {
max1, max2 = s[i], max1
}
max(s, i+1, max1, max2)
}

// Time complexity: O(n)
// Space complexity: O(n)
15 changes: 15 additions & 0 deletions exercises/numbers/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package main

import "fmt"

func print(n int) {
if n == 0 {
return
}
fmt.Println(n)
print(n - 1)
fmt.Println(n)
}

// Time complexity: O(n)
// Space complexity: O(n)
24 changes: 24 additions & 0 deletions exercises/sumDigits/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package main

import (
"fmt"
)

func sumDigits(n, sum int) {
if n == 0 {
fmt.Println(sum)
return
}
sum += n % 10
sumDigits(n/10, sum)
}

func main() {
sumDigits(123, 0)
sumDigits(987, 0)
sumDigits(12345, 0)
sumDigits(12357, 0)
}

// Time complexity: O(n)
// Space complexity: O(n)