请问leetcode34 我这个二分法为什么超时了
来源:3-1 从二分查找法看如何写出正确的程序
Y1ng
2020-02-14
class Solution {
public int[] searchRange(int[] nums, int target) {
int[] res = new int[]{-1, -1};
int n = nums.length;
if(nums == null || n == 0 || target < nums[0] || target > nums[n - 1]) {
return res;
}
res[0] = findStart(nums, target);
res[1] = findEnd(nums, target);
return res;
}
private int findStart(int[] nums, int target) {
int start = 0;
int end = nums.length - 1;
while(start < end) {
int mid = start + (end - start) / 2;
if(nums[mid] >= target) {
end = mid;
} else {
start = mid + 1;
}
}
return (nums[start] == target)? start : -1;
}
private int findEnd(int[] nums, int target) {
int start = 0;
int end = nums.length - 1;
while(start < end) {
int mid = start + (end - start) / 2;
if(nums[mid] <= target) {
start = mid;
} else {
end = mid - 1;
}
}
return (nums[end] == target)? end : -1;
}
}
请问是哪一行出错了呢?
谢谢
写回答
1回答
-
liuyubobobo
2020-02-14
抱歉,你这样直接贴代码我无法帮你调试。我不可能做到有同学贴出有问题的代码就帮助同学们把错误调试出来,如果那样的话,我就做不了其他事情了,请谅解。
我测试了一下,你的程序在[1, 1] 中寻找 1 的开始和结束位置都会超时,说明有死循环。
这个测试用例的数组中只有两个数字。尝试一下在本地进行调试,看看为什么会出现死循环?debug 是软件开发人员的基本功,只有不断地进行 debug,才能找到自己的思维和实际程序执行不一致的地方,才能对程序设计越来越有感觉,才能进步哦。
加油!:)
312021-09-20
相似问题