數據結構&算法-array、slice

[@一個菜雞的成長之路]

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😘

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章