[@一個菜雞的成長之路]
Laraine’s channel
hello, everyone! welcome to my blog。😘😘
菜雞程序媛的進階之路-golang array&slice
一.數組 array
首先,我們來了解一下什麼是數組
我相信各位都有過軍訓吧,記得當時冒着烈日報號嗎,1,2,3…
每個人與自己的位置,通過號碼即可找個對應某個人。這不像極了數組嗎。
But,有一點不同的是,數組的下表是從0開始,please remember it!!😜
從這我們還可以發現,數組之間每個元素地址是連續的,並且元素的類型都是相同的,要想找到某個人,並且又不知道這個人的編號,就只能從頭開始報數,所以數組時間複雜度=O(n)。到這,我門可以給數組下定義了,即由一段連續的具有相同類型(int,string,float等等)的元素組成的集合。
下面,follow me👇
如上圖,聲明瞭2個一維數組,一個定長,一個不定長。
不過,仔細看看劃紅線部分,敲黑板了啊,數組添加元素不能超過限定長度,len(newArray)=3,這裏添加了4個元素,所以報錯了。
func main() {
var array []uint64
var newArray [3]uint64
array = []uint64{1, 2, 5, 6}
for i, v := range array {
fmt.Printf("i:%d,v:%d\n", i, v)
}
newArray = [3]uint64{1, 2, 5}
for i1, v1 := range newArray {
fmt.Printf("i1:%d,v1:%d\n", i1, v1)
}
}
輸出結果:
到這,相信數組的概念已經清楚了。
1.構建是需要一段連續空間
2.查找某個元素是否存在,刪除和添加元素,時間複雜度爲O(n),n爲元素個數
3.已知下標查詢某個元素,時間複雜度O(1)
4.數組是值類型,規定了長度便不能更改
下面我們來結合實際看一下,注意啦,前方高能來襲**
leetcode 242
這個可以用數組的概念來解,假設全部小寫,可以設置一個定長26的數組,遍歷s,出現字母,便給當前字母數字+1,另一字符串出現當前字母就-1,最後看每個小寫字母是否爲0。
這是我目前能想到耗時最小,內存佔用率最低的方法,有更好思路的同學可以分享分享
func isAnagram(s string, t string) bool {
if len(s) != len(t) {
return false
}
var m [26]int
for i := 0; i < len(s); i++ {
m[s[i]-'a']++
}
for i := 0; i < len(s); i++ {
m[t[i]-'a']--
if m[t[i]-'a'] < 0 {
return false
}
}
return true
}
到這數組相信你們已經可以出師了,👏👏
當然這道題還可以延展,這裏題目只是限定了全是小寫字母,如果大小寫都包含呢,可以試一下。
欲知後事如何,請聽下回分解。
bye😘