The problem
An array is circularly sorted if the weather are sorted in ascending order however displaced, or rotated, by any variety of steps.
Full the perform/methodology that determines if the given array of integers is circularly sorted.
Examples:
These arrays are circularly sorted (true
):
[2, 3, 4, 5, 0, 1] --> [0, 1] + [2, 3, 4, 5]
[4, 5, 6, 9, 1] --> [1] + [4, 5, 6, 9]
[10, 11, 6, 7, 9] --> [6, 7, 9] + [10, 11]
[1, 2, 3, 4, 5] --> [1, 2, 3, 4, 5]
[5, 7, 43, 987, -9, 0] --> [-9, 0] + [5, 7, 43, 987]
[1, 2, 3, 4, 1] --> [1] + [1, 2, 3, 4]
Whereas these will not be (false
):
[4, 1, 2, 5]
[8, 7, 6, 5, 4, 3]
[6, 7, 4, 8]
[7, 6, 5, 4, 3, 2, 1]
The answer in Golang
Possibility 1:
bundle answer
func IsCircleSorted(r []int) bool {
downs := 0
for i:= 0; i<len(r); i ++ {
if r[i] > r[(i+1)%len(r)] {
downs += 1}
}
return downs <= 1
}
Possibility 2:
bundle answer
import "kind"
func IsCircleSorted(r []int) bool {
q := make([]int, len(r))
for i := 0; i < len(r); i++ {
for j := 0; j < len(r); j++ {
q[j] = r[(j+i)%len(r)]
}
if kind.IntsAreSorted(q) {
return true
}
}
return len(r) == 0
}
Possibility 3:
bundle answer
func IsCircleSorted(r []int) bool {
if len(r) == 0 {
return true
}
decreaseCount := 0
for i := 1; i < len(r); i++ {
if r[i-1] > r[i] {
decreaseCount++
}
}
if r[len(r)-1] > r[0] {
decreaseCount++
}
return decreaseCount <= 1
}
Take a look at circumstances to validate our answer
bundle solution_test
import (
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("Instance Assessments",func() {
It("Take a look at 1",func() {Anticipate(IsCircleSorted([]int{2,3,4,5,6})).To(Equal(true))})
It("Take a look at 2",func() {Anticipate(IsCircleSorted([]int{6,2,3,4,5})).To(Equal(true))})
It("Take a look at 3",func() {Anticipate(IsCircleSorted([]int{3,2,4,5,6})).To(Equal(false))})
})