请问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,才能找到自己的思维和实际程序执行不一致的地方,才能对程序设计越来越有感觉,才能进步哦。


加油!:)

3
1
慕莱坞1557513
老师,你真是人好。。
2021-09-20
共1条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程