3 回答

TA貢獻1871條經(jīng)驗 獲得超8個贊
我會做類似下面的事情;
func TwoOldestAges(ages []int) (oldest [2]int) {
sort.Sort(sort.Reverse(sort.IntSlice(ages)))
copy(oldest[:], ages)
return
}
這里的工作示例
我為返回參數(shù)添加了一個名稱,這樣您就不必指定您在函數(shù)中創(chuàng)建的數(shù)組大小。由于數(shù)組的最大大小為 2,因此副本只會將前兩個結(jié)果放入數(shù)組中。因此,我們對您的年齡進行排序(按升序排序),然后將其反轉(zhuǎn),以便兩個最高的結(jié)果是前兩個鍵。
現(xiàn)在,如果您愿意,您可以更新要返回的數(shù)組的大小,而無需更新方法內(nèi)的任何內(nèi)容。
編輯: 我可能還應(yīng)該提到這也可以保護您免受超出范圍的索引的恐慌。例如,如果你只通過一個長度/容量為1的切片,如果你依賴,ages[:-2]你很可能會遇到越界恐慌:
恐慌:運行時錯誤:切片超出范圍 [:2] 容量為 1

TA貢獻1848條經(jīng)驗 獲得超2個贊
我是新手,我猜你可以創(chuàng)建一個固定大小為2的數(shù)組,然后將切片的前兩個值復(fù)制到數(shù)組中
s := []int{1, 2, 3}
var twoElements [2]int
//copy the first two values of slice into the entirety of the array
copy(twoElements[:],s[:2]) //copy returns an int of the elements copied
從去文檔:
復(fù)制內(nèi)置函數(shù)將元素從源切片復(fù)制到目標切片。(作為一種特殊情況,它還將字節(jié)從字符串復(fù)制到字節(jié)片。)源和目標可能重疊。Copy 返回復(fù)制的元素數(shù)量,它將是 len(src) 和 len(dst) 的最小值。

TA貢獻1773條經(jīng)驗 獲得超3個贊
Go 旨在鼓勵高效的代碼。由于排序,您的算法是 O(n log n)。更好的算法是 O(n)。
例如,O(n),
package main
import (
"fmt"
)
func TwoOldestAges(ages []int) [2]int {
var old [2]int
for _, age := range ages {
if old[0] < age {
old[1] = old[0]
old[0] = age
} else if old[1] < age {
old[1] = age
}
}
return old
}
func main() {
ages := []int{1, 99, 42, 7, 66, 77}
fmt.Println(ages)
oldest := TwoOldestAges(ages)
fmt.Println(oldest)
ages = []int{1, 77, 42, 7, 66, 99}
fmt.Println(ages)
oldest = TwoOldestAges(ages)
fmt.Println(oldest)
}
游樂場: https: //play.golang.org/p/rq4SMS3MRqY
輸出:
[1 99 42 7 66 77]
[99 77]
[1 77 42 7 66 99]
[99 77]
- 3 回答
- 0 關(guān)注
- 162 瀏覽
添加回答
舉報