数据结构&算法-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😘

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