数组操作与算法复杂度解析

1、对于一个包含100个元素的数组,以下操作分别需要多少步:a. 读取 b. 搜索数组中不存在的值 c. 在数组开头插入元素 d. 在数组末尾插入元素 e. 删除数组开头的元素 f. 删除数组末尾的元素

a. 1步;b. 100步;c. 101步;d. 1步;e. 100步;f. 1步

2、通常,数组中的搜索操作会查找给定值的第一个实例。但有时我们可能想查找给定值的所有实例。例如,假设我们想统计数组中“apple”这个值出现的次数。找到所有“apple”需要多少步?用N来表示答案。

需要 N 步,因为要遍历数组中的每一个元素来统计 “apple” 出现的次数,数组元素数量用 N 表示,所以需要 N 步。

3、在有序数组 [2, 4, 6, 8, 10, 12, 13] 中使用线性搜索查找数字 8 需要多少步?

四步

4、在有序数组[2, 4, 6, 8, 10, 12, 13]中查找数字8,二分查找需要多少步?

在有序数组[2, 4, 6, 8, 10, 12, 13]中查找数字8,二分查找只需1步。

5、在一个包含100,000个元素的数组上进行二分查找,最多需要多少步?

大约16步

6、使用大O表示法描述以下判断给定年份是否为闰年的函数的时间复杂度:函数 isLeapYear(year) ,其代码为 return (year % 100 === 0) ? (year % 400 === 0) : (year % 4 === 0);

该函数的时间复杂度为 O(1) ,因为无论输入的年份是多少,函数执行的操作数量都是固定的,不随数据规模的变化而变化,属于常数时间复杂度。

7、使用大O表示法描述以下函数的时间复杂度,该函数用于对给定数组中的所有数字求和:function arraySum(array) { let sum = 0; for(let i = 0; i < array.length; i++) { sum += array[i]; } return sum; }

该函数的时间复杂度为O(N),其中N是数组的长度。

8、以下函数基于一个古老的类比来描述复利的力量:想象你有一个棋盘,在一个方格上放一粒大米。在第二个方格上,你放2粒大米,因为这是前一个方格上大米数量的两倍。在第三个方格上,你放4粒。在第四个方格上,你放8粒,在第五个方格上,你放16粒,依此类推。以下函数计算放置一定数量的大米粒需要放在哪个方格上。例如,对于16粒大米,函数将返回5,因为你将把16粒大米放在第五个方格上。使用大O表示法描述此函数的时间复杂度,函数如下:function chessboardSpace(numberOfGrains) { let chessboardSpaces = 1; let placedGrains = 1; while (placedGrains < numberOfGrains) { placedGrains *= 2; chessboardSpaces += 1; } return chessboardSpaces; }

该函数的时间复杂度为O(log n)。

9、以下函数接受一个字符串数组,并返回一个仅包含以字符“a”开头的字符串的新数组。使用大O符号描述该函数的时间复杂度:function selectAStrings(array) { let newArray = []; for(let i = 0; i < array.length; i++) { if (array[i].startsWith(“a”)) { newArray.push(array[i]); } } return newArray; }

该函数的时间复杂度为O(N),其中N是数组的长度。

10、以下函数用于从一个有序数组中计算中位数。用大O表示法描述该函数的时间复杂度:函数接受一个有序数组,根据数组长度是奇数还是偶数来计算中位数。

该函数的时间复杂度为 O(1)
因为函数只进行了常数级别的操作,不随数组长度的增加而增加额外的操作步骤。

11、填写以下表格中的问号,描述不同大O类型在给定数据元素数量下的步骤数:| O(N²) | O(log N) | O(N) | N元素 || ---- | ---- | ---- | ---- ||? |? | 100 | 100 ||? |? |? | 2000 |

对于 O(N²),当 N = 100 时,步骤数为 100² = 10000;当 N = 2000 时,步骤数为 2000² = 4000000。

对于 O(log N),假设以 2 为底,当 N = 100 时,步骤数约为 log₂100 ≈ 6.64,取整为 7;当 N = 2000 时,步骤
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值