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 时,步骤

最低0.47元/天 解锁文章
983

被折叠的 条评论
为什么被折叠?



