gpt4 book ai didi

java - 当 target == list[mid] 时,二分查找在 while 循环的第一次迭代中不返回 true

转载 作者:行者123 更新时间:2023-11-30 05:33:05 26 4
gpt4 key购买 nike

我以为我是二分搜索专家,因为我可以进行线性、递归和迭代,但我什至无法让它在 java 中工作

因此,如果我将目标变量设置为等于中点,我的 if 语句会跳过该变量并继续执行 else if

public static void main(String[] args) {
int[] list = { 11, 22, 33, 44, 55, 66, 77, 88, 99 };
int target = 44;
System.out.print(BinarySearchIterarive(list, target));

}

public static boolean BinarySearchIterarive(int[] list, int target) {
int high = list.length - 1;
int low = 0;
while (low <= high) {
int mid = (low + high) / 2;
if (target == list[mid]) {
return true;
} else if (target < list[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}

}
return false;
}
}

它只是跳过我的 if 语句

if (target ==list[mid])

当列表[mid]为 44 时

最佳答案

让我们在这里进行简单的跟踪。

11 | 22 | 33 | 44 | 55 | 66 | 77 | 88 | 99

Target: 44

第一步:high = 8, low = 0

low <= high

进入循环:mid = 4 , list[4] = 55

Target < list[mid]
high = 3, low = 0

第二步:high = 3 , low = 0

low <= high

进入循环:mid = 1 , list[1] = 22这里由于mid是整数小数部分,计算时忽略

Target > list[mid]

因此,low = 2 , high = 3

第三步:high = 3 , low = 2再次,low <= high ,进入循环:mid = 2 , list[2] = 33

Target > list[mid]

因此,low = 3 , high = 3

最后一步:

low == high

进入循环:mid = 3 , list[3] = 44

Target = list[mid]
returns true

关于java - 当 target == list[mid] 时,二分查找在 while 循环的第一次迭代中不返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57158028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com