【问题标题】:Binary search logic for Counting elements in two arrays(GFG)计算两个数组中元素的二进制搜索逻辑(GFG)
【发布时间】:2021-12-30 10:44:39
【问题描述】:

我正在使用此逻辑在排序数组 b[] 中查找小于或等于 x 的元素。但是,它不适用于某些测试用例。

int binary_search(int x, int b[], int b_size)
{
    int low = 0;
    int high = b_size-1;
    
    
    while(low<=high)
    {
        int mid = low + (high-low)/2;
        
        if(b[mid]<=x && b[mid+1]>x) return mid;
        else if(b[mid]>x) high = mid-1;
        else low = mid+1;
    }
}

在找了一个soln之后,我发现了下面的逻辑。谁能告诉我我的逻辑和这个逻辑有什么区别?

int binary_search(int arr[], int l, int h, int x)
{
    while (l <= h) {
        int mid = (l + h) / 2;
 
        // if 'x' is greater than or equal to arr[mid],
        // then search in arr[mid+1...h]
        if (arr[mid] <= x)
            l = mid + 1;
 
        // else search in arr[l...mid-1]
        else
            h = mid - 1;
    }
 
    // required index
    return h;
}

【问题讨论】:

    标签: arrays logic binary-search


    【解决方案1】:

    在您的代码中,您没有考虑 mid+1 可以等于 b_size,假设 b_size=1 然后 mid=0 和 mid+1=1,这意味着您正在检查索引 1 处的值,即 b[1 ] 超出数组 b 的范围。

    【讨论】:

    • 嗨@anju,你解释得很好。我通过在开头添加一些保护子句来更新我的代码 if(x=b[b_size-1]) 返回 b_size-1;它现在工作正常。感谢您的解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 2022-10-02
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多