二分法的细节注意

在利用二分法时,有的人常常会写成

int mid = ( left + right) / 2;

但是这个是不严谨的,在left+right > INT_MAX时会出现错误。
因此推荐使用

int mid = left + ( right - left) / 2;

示例如下:

#include<iostream>
using namespace std;
int main()
{
    int a = 1, b = INT_MAX;
    int mid1 = (a + b) / 2;
    int mid2 = a + (b - a) / 2;
    cout << "mid1 = "<< mid1 << endl;
    cout << "mid2 = "<< mid2 << endl;
    return 0;
}

结果
这里写图片描述


版权声明:本文为zhaohengchuan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。