Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

checking array if contains two condition

Suppose I have the following

if arr contains negative and positive number, should return 0.
if arr only have positive number, return the smallest number (except 0).
if arr only have negative number, return the biggest number (except 0).

func sesi(arr []int) int {
minmax := arr[0]
for _, v := range arr {
    if v >= 0 && v <= 0 {
        minmax=0
        return minmax
    } else if v > 0 {
        if v < minmax {
            minmax = v
            return minmax
        }
    } else if v < 0 {
        if v < minmax {
            minmax = v
            return minmax
        }
    }
}
return minmax }

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

So you’re not accounting for the input being a slice of zeroes, I’m assuming in that case zero has to be returned. You also state that a slice of negative only values should return "the biggest number" I’ve assumed that this means the highest value (ie -123 < -1 => returns -1). By sorting the input slice, this is a trivial task to do:

func sesi(in []int) int {
    if len(in) == 0 {
        return 0 // check for empty input
    }
    sort.Ints(in) // sort the integers, in ascending order
    if in[0] < 0 {
        last := in[len(in)-1] // highest value in the input
        if last > 0 {
            return 0 // lowest value is negative, highest is positive
        }
        return last // all negative (not checking for zeroes), return highest value
    }
    if in[0] > 0 || len(in) == 1 { // first element is positive > 0, or we only have 1 element (could be []int{0})
        return in[0]
    }
    for i := 1; i < len(in); i++ {
        if in[i] > 0 {
            return in[i] // find smallest non-zero value in a positive slice
        }
    }
    return 0 // slice contains no values other than zeroes
}

Demo

If, by "biggest number" in an all-negative slice you actually meant to say the biggest absolute value (ie -123, -1 => return -123), you just need to change the bit where I’m assigning last := in[len(in)-1] to this:

if in[0] < 0 {
    if in[len(in)-1] > 0 {
        return 0
    }
    return in[0] // smallest value, largest absolute value
}

Nice and simple

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading