【问题标题】:question about if condition in binary search关于二分查找中if条件的问题
【发布时间】:2020-08-23 16:04:11
【问题描述】:
int binary_search(const vector<int>& matrix, int target) {

        int start = 0, end = matrix.size() - 1; 
        while (start < end) {
            int mid = start + (end - start)/2;
            if (matrix[mid] <= target) {  // if (matrix[mid] < target)
                start = mid + 1;
            } else {
                end = mid;
            }
        }
        return end;
}
int main()
{
    cout << binary_search({1, 3, 7, 10, 20}, 15);
    return 0;
}

嗨,我很困惑 while 循环中的“

二分搜索最令人困惑的部分是我永远不确定在条件语句中使用“

即使我有一个基本的想法,但是当涉及到编码时,我怎么能自信并确定这应该是“

如果有人可以输入,我将不胜感激。

谢谢!

【问题讨论】:

    标签: arrays algorithm c++11 binary-search


    【解决方案1】:

    其实,

    (1) 当 matrix[mid] == target 你可以直接返回那里。

    (2) 如果 start == end 那么您只查看一个元素(无论它是否等于目标)。

    如果它不等于目标,那么我们说元素未找到,否则在特定索引处找到元素

    从您的代码看来,您似乎已经假设目标将出现在矩阵中,并且您直接返回“end”而没有 start

    因此,如果您不假设目标将在矩阵中,那么您必须同时设置条件 start

    【讨论】:

    • 不需要 matrix[mid] == target,因为如果是这样,如果数组中存在 target,则在中断循环后 start==end 和 matrix[start]==target。当目标不在数组中时,
    • 是的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多