作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试查找两个数组的重复项,并且其中一个数组明显更大,因此我在遍历较小的数组的同时对较大的数组进行二分搜索以查找该数字。但是,我的解决方案没有运行。
function bSearch(arr, num) {
let start = 0
let end = arr1.length - 1
while (start <= end) {
let middle = Math.round(start + end / 2)
if (arr[middle] === num) {
return arr[middle]
} else if (arr[middle] < num) {
start = middle
} else {
end = middle
}
}
return false
}
function dup(arr1, arr2) {
let output = []
let shorterArray = arr1.length > arr2.length ? arr2 : arr1
for (let i = 0; i < shorterArray.length; i++) {
if (bSearch(arr1, shorterArray[i])) {
output.push(shorterArray[i])
}
}
return output
}
let arr1 = [1, 2, 3, 5, 6, 7], arr2 = [3, 6, 7, 8, 20]
dup(arr1, arr2)
// should return [3, 5, 7]
// currently only returns [3]
最佳答案
这里有一些小问题。
bSearch(arr1, ShortArray[i])
- 如果 arr1
很短,则仅搜索它。在二分搜索中,您使用 arr1
的长度,而不是 arr
来进行初始 end
变量声明。
let middle = Math.round(start + end/2)
- .round()
以不同方式进行舍入,请使用 .floor()
.
Math.round((start + end)/2
- start
和 end
加法应放在括号内
二进制逻辑应该增加或减少中间,否则你最终会陷入无限循环,即 (6 + 6)/2 === 6
因此:
if (arr[middle] === num) {
return arr[middle]
} else if (arr[middle] < num) {
start = middle + 1
} else {
end = middle - 1
}
关于javascript - 二分查找提前退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56728263/
我正在尝试编写一个程序,在名为 items 的数组中进行顺序搜索和二分搜索,该数组具有 10000 个已排序的随机 int 值。第二个名为 targets 的数组加载了 1000 个 int 值(50
当我尝试使用图表并为其编写一些代码但没有成功时,我遇到了一个问题:/!! 我想创建一些东西来获取图形数据并检查它是否:1- 连接2-二分法3-有循环4-是一棵树 所以我想知道,例如,是否可以将其写入以
我是一名优秀的程序员,十分优秀!