假设我有一个数组const series = [0,4,8]和另一个数组const positions = [0,3,4,7,8]
如何检测positions中是否包含series的所有值
我最初的反应是创建一个for loop,它将遍历positions中的所有值,并检查它们是否等于series的值,但这似乎非常低效。
发布于 2021-03-29 00:40:20
最坏的情况是复杂度是n * log(n)。用于循环series array中所有元素的n和用于二进制搜索的log(n)。
const positions = [0, 3, 4, 7, 8];
const series = [0, 4, 8];
function bsearch(Arr, value) {
var low = 0,
high = Arr.length - 1,
mid;
while (low <= high) {
mid = Math.floor((low + high) / 2);
if (Arr[mid] == value) return mid;
else if (Arr[mid] < value) low = mid + 1;
else high = mid - 1;
}
return -1;
}
let i;
for (i = 0; i < series.length; ++i) {
const pos = bsearch(positions, series[i]);
if (pos === -1) break;
}
if (i === series.length) {
console.log("All element present");
} else {
console.log("All elmenet not present");
}
https://stackoverflow.com/questions/66843664
复制相似问题