亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查找零以下的最大值

查找零以下的最大值

Go
慕工程0101907 2022-09-12 16:11:01
我試圖從差異 n[i] - n[i-1] 時間序列中獲取最大值。切片中的第一個值始終為零,下面是代碼:func MaxBelowZero(n ...float64) float64 {var maxValue float64if len(n) == 1 {    return n[0]} else if len(n) == 0 {    return 0.}for i := range n {    if i == 0 {        maxValue = math.SmallestNonzeroFloat64        continue    }    if maxValue < n[i] && n[i] < 0 {        maxValue = n[i]    }}return maxValue}var sliceTest = []float64{0, 1, 2, -1, -2, -10, 10, 20}MaxBelowZero(sliceTest...)Output: 5e-324它假設為-1。我做錯了什么?我將不勝感激。游樂場中的代碼:鏈接
查看完整描述

3 回答

?
森林海

TA貢獻2011條經驗 獲得超2個贊

func MaxBelowZero(n ...float64) float64 {

    maxValue := -math.MaxFloat64 // Initial value must be negative

    if len(n) == 1 {

        return n[0]

    } else if len(n) == 0 {

        return 0.

    }

    for i := 1; i < len(n); i++ {

        diff := n[i] - n[i-1] // Correct logic here

        if diff > maxValue && diff < 0 {

            maxValue = diff

        }

    }

    return maxValue

}


查看完整回答
反對 回復 2022-09-12
?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

您可以對切片進行反向排序,然后找到第一個負數:


package main

import "sort"


func main() {

   a := []float64{0, 1, 2, -1, -2, -10, 10, 20}

   sort.Slice(a, func(d, e int) bool {

      return a[e] < a[d]

   })

   n := sort.Search(len(a), func(n int) bool {

      return a[n] < 0

   })

   println(a[n] == -1)

}

或者按符號排序,然后按絕對值排序:


package main

import "math"


type sFunc func(a, b float64) bool


var sFuncs = []sFunc{

   func(a, b float64) bool {

      return math.Copysign(1, a) < math.Copysign(1, b)

   },

   func(a, b float64) bool {

      return math.Abs(a) < math.Abs(b)

   },

}

結果:


package main


import (

   "fmt"

   "sort"

)


func main() {

   floats := []float64{0, 1, 2, -1, -2, -10, 10, 20}

   sort.Slice(floats, func(a, b int) bool {

      fa, fb := floats[a], floats[b]

      for _, sf := range sFuncs {

         if sf(fa, fb) {

            return true

         }

         if sf(fb, fa) {

            break

         }

      }

      return false

   })

   fmt.Println(floats) // [-1 -2 -10 0 1 2 10 20]

}

https://golang.org/pkg/sort#Search

https://golang.org/pkg/sort#Slice



查看完整回答
反對 回復 2022-09-12
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

math.SmallestNonzeroFloat64是最接近 0 且不是 0 的數字,而不是離零最遠的數字。試試這個:


去游樂場


func MaxBelowZero(values ...float64) float64 {

    if len(values) == 0 {

        return 0

    } else if len(values) == 1 {

        return values[0]

    }

    max := -math.MaxFloat64

    for _, n := range values {

        if n >= 0 {

            continue

        }

        if n > max {

            max = n

        }

    }

    return max

}


查看完整回答
反對 回復 2022-09-12
  • 3 回答
  • 0 關注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號