第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

查找列表中的最小數(shù)字

查找列表中的最小數(shù)字

Go
慕神8447489 2023-05-08 14:42:48
我用 Go 編寫了一個(gè)程序,它可以找到列表中的最小數(shù)字并且它可以工作。但是,我真的不明白其中的邏輯。你能解釋一下它是如何工作的嗎?package mainimport "fmt"func main() {    x := []int{        48, 96, 86, 68,        57, 82, 63, 70,        37, 34, 83, 27,        19, 97, 9, 17,    }    for i, num := range x {        if num < i {            fmt.Println(num)        }    }}游樂場:https://play.golang.org/p/Awuw2Th1g2V輸出:9我教科書中的解決方案不同,我理解那里的邏輯。
查看完整描述

4 回答

?
尚方寶劍之說

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊

要找到列表中的最小數(shù)字,您需要遍歷列表并存儲(chǔ)您當(dāng)前找到的最小數(shù)字。將這個(gè)“迄今為止最小”的數(shù)字與列表中的其他數(shù)字進(jìn)行比較,如果您發(fā)現(xiàn)一個(gè)較小的數(shù)字,請(qǐng)用它替換您的最小數(shù)字。在迭代結(jié)束時(shí),您將知道列表中的最小數(shù)字。


smallest := x[0]            // set the smallest number to the first element of the list

for _, num := range x[1:] { // iterate over the rest of the list

    if num < smallest {     // if num is smaller than the current smallest number

        smallest = num      // set smallest to num

    }

}

fmt.Println(smallest)


查看完整回答
反對(duì) 回復(fù) 2023-05-08
?
阿晨1998

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊

您提供的示例程序純屬巧合。如果正確的值 9 是切片中的第一個(gè),則根本不會(huì)有輸出。


有多種方法可以達(dá)到識(shí)別最小int的目的(還有更多的方法):


func smallestOfCopyWithSort(in []int) int {


  // Make a copy, so we do not have to modify the original slice.

  // Note: Do NOT use this approach, it is here only for completeness.

  copy := append([]int(nil), in...)

  sort.Ints(copy)

  return (copy[0])

}


func smallestWithSort(in []int) int {

  // Sort the slice.

  // Note that it will be modified and you

  // need to make sure that it will always

  // be sorted, even when you add new values.

  sort.Ints(in)

  return (in[0])

}


func smallestWithMattsApproach(in []int) int {

  smallest := in[0]            // set the smallest number to the first element of the list


  for _, num := range in[1:] { // iterate over the rest of the list

    if num < smallest { // if num is smaller than the current smallest number

      smallest = num // set smallest to num

    }

  }


  return smallest

}

@Matt 的方法可能是最好的方法,因?yàn)樗浅??,無需修改原始切片。這實(shí)際上取決于您想要實(shí)現(xiàn)的目標(biāo)。這里有一些基準(zhǔn)


$ go test -test.benchmem -bench=. -test.cpu 1,2,4 -test.benchtime=10s

goos: darwin

goarch: amd64

pkg: <redacted>

BenchmarkSortWithCopy          5000000       345 ns/op       160 B/op          2 allocs/op

BenchmarkSortWithCopy-2        5000000       354 ns/op       160 B/op          2 allocs/op

BenchmarkSortWithCopy-4        5000000       352 ns/op       160 B/op          2 allocs/op

BenchmarkMattsApproach       100000000      15.1 ns/op         0 B/op          0 allocs/op

BenchmarkMattsApproach-2     100000000      15.1 ns/op         0 B/op          0 allocs/op

BenchmarkMattsApproach-4     100000000      15.2 ns/op         0 B/op          0 allocs/op

BenchmarkSort               2000000000      0.00 ns/op         0 B/op          0 allocs/op

BenchmarkSort-2             2000000000      0.00 ns/op         0 B/op          0 allocs/op

BenchmarkSort-4             2000000000      0.00 ns/op         0 B/op          0 allocs/op

毫不奇怪,smallestOfCopyWithSort如果多次調(diào)用,它比其他方法慢幾個(gè)數(shù)量級(jí)。


Matts 的方法非常快,不會(huì)復(fù)制或修改任何內(nèi)容。


但是,如果您需要多次訪問最小數(shù)量的切片,則對(duì)切片進(jìn)行排序(升序)并簡單地訪問第一個(gè)成員會(huì)更高效。這樣做的原因是切片將被修改為排序順序。但是,這種方法有一個(gè)警告:您要么在向切片添加值時(shí)非常小心,要么在每次修改它時(shí)都使用它,這可能會(huì)抵消性能優(yōu)勢(shì),具體取決于您的讀取和寫入比率/從切片。就個(gè)人而言,我發(fā)現(xiàn)smallestWithSort我最常使用的解決方案,因?yàn)槲艺谑褂玫那衅ǔ2粫?huì)改變。


結(jié)論

如果您只需要訪問最小的數(shù)字一次或者切片值的順序很重要,請(qǐng)使用 Matt 的方法。如果順序無關(guān)緊要并且您需要多次訪問最小的數(shù)字,您可能應(yīng)該使用smallestWithSort,同時(shí)牢記約束條件。


查看完整回答
反對(duì) 回復(fù) 2023-05-08
?
qq_笑_17

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊


for i, num := range x {

        if num < i {

            fmt.Println(num)

        }

    }

這里,i代表索引,num代表價(jià)值。因此,您的if條件表示值小于索引然后打印該值。因?yàn)椋? 值是 9,索引是 14。所以它打印 9,這不是你想要的。


查看完整回答
反對(duì) 回復(fù) 2023-05-08
?
富國滬深

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊

返回python中列表的最小數(shù)量


def find_smallest_number(input_list):

    d=[]

    for num in input_list:

        for i in numbers:

            if num<i:

                if d==[]:

                    d.append(num)

                else:

                    for j in d:

                        if j>num:

                            d.remove(j)

                            d.append(num)

    return d


查看完整回答
反對(duì) 回復(fù) 2023-05-08
  • 4 回答
  • 0 關(guān)注
  • 203 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)