1.算法效率
绝大多数事物都有一个好坏的评判标准,那么程序代码也不例外。算法效率就是它的评判标准,算法效率又主要体现在两个方面:1.时间复杂度(体现在算法运行速度)2.空间复杂度(体现在存储所需空间),但现在随着高科技的发展,内存越来越大,故我们对空间复杂度的重视程度要远不及时间复杂度。
2.空间复杂度
因为用的比较少,我就简单说两句:空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度 ,我们一般算变量的个数来代表它,与时间复杂度相似,我们也会用大o渐进表示法。
3.时间复杂度
算法中的基本操作的执行次数,为算法的时间复杂度量度,为了简洁的表示时间复杂度,我们去掉对结果影响不大的项,一般取最高阶项。(使用大o渐进表示法来表示)
我们在计算执行次数时有个原则,就是取最坏情况运行次数(例如,最好运行一次,最坏n次,那空间复杂度就是o(n)
运行结果:
在某些算法思想中空间复杂度往往会很高(例如递归),但常常代码较为简洁。
下面我们介绍一种常被忽略的改进算法的方法--异或
异或^:作为双目运算符,将两个操作数二进制上按位进行相同为0,相异为1的操作。
关于异或,我们使用的很少,因为它设计二进制按位运算,不是很直观,但上帝给他开了一扇窗,他的一个特点就是:两个相同数互相异或会消失,这一特性在某些地方有奇效。
例如在某大厂的笔试题中:请设计一个函数让两个数值交换(不定义第三个变量)
对于交换数字,我们再熟悉不过了,但不定义第三变量,却难倒一大批人,这个时候我们今天的主角——异或就闪亮登场了。
再举个leetcode原题260. 只出现一次的数字 IIIhttps://leetcode-cn.com/problems/single-number-iii/
这个类型题如果不用这种方法,时间复杂度比较大,最起码这种方法只有o(n)复杂度,肯定不大。
希望对大家有所帮助,这是我数据结构系列第一讲。
如有收获,给个点赞吧。