leetcode278.First Bad Version 关于有符号数加法溢出的错误

来源:互联网 发布:网络实名制的利弊 编辑:程序博客网 时间:2024/05/21 23:33

1、不会溢出的写法

bool isBadVersion(int version);class Solution {public:    int firstBadVersion(int n) {int left = 1,right =n,mid = 0;while(left<=right){mid = left +(right-left)/2;if (isBadVersion(mid)) right = mid-1;else left = mid+1;}return left;    }};
说明:在有符号数加法中,mid = (left+right)/2容易造成溢出,mid = left+(right-left)/2是比较安全的写法


2、溢出的写法

bool isBadVersion(int version);class Solution {public:    int firstBadVersion(int n) {int left = 1,right =n,mid = 0;while(left<=right){mid = (right+left)/2;if (isBadVersion(mid)) right = mid-1;else left = mid+1;}return left;    }};
评测时会溢出报错

说明:在深入理解计算机系统中,关于有符号数加法的说明


0 0