[テンプレート]二分答え

1.シーン

二分答えは、一般的に、我々はこれら二つの問題は、一般的に問題を解決するためにバイナリ回答を使用することができる遭遇したとき、上記修飾最小値または最大値の解決に使用されます。

2.半分の答えは何ですか

答えは答えの方法を確定するために、範囲を縮小し、バイナリサーチの範囲で可能なすべての答えの半分です。

最低3。

//求最小值
int binary(int left, int right) {
    int mid;
    while(left < right) {
        mid = (right + left) / 2;
        if (check(mid)) right = mid;
        else left = mid + 1;
    }
    return left;
}

私たちは、最小要件は、その値は右端の条件を満たすように割り当てられ、プラス時に1が左マージンに割り当てられた値を満たしていないことを知ることができるleft == rightか、left > rightする場合、クエリは最小限に準拠する必要があります。

最大値を選択する4。

//求最大值
int binary(int left, int right) {
    int mid;
    while(left < right) {
        mid = (right + left + 1) / 2;
        if (check(mid)) left = mid;
        else right = mid - 1;
    }
    return left;
}

同様に、最大の要件は、その後、私たちは小さな値を修飾放棄する必要がある、割り当ての要件を満たすために約境界点を残している、割り当ての値の右側の境界は削減の対象ではありません。常に世論調査では、最後に残ったの予選最高を続けています。どのmid = (right + left + 1) / 2ときので、無限ループを防ぐためであるleft = right + 1正確な条件に沿って、時間は、left = (right + left) / 2ループを無限ます。

5.チェック機能の概念

我々はチェックしている、その後、解決するために使用する二分法に選ばれていますので、それは我々が答えは思考の一般的な方向から想定されていない答えを、確認しますが、検証を続けて知っている場合でなければなりません。チェック機能は、多くの場合、正しい検証するために、答えを知っているという仮定に基づいています。

おすすめ

転載: www.cnblogs.com/szdytom/p/binary_search.html