请帮忙看看这段折半查找代码解决方法
请帮忙看看这段折半查找代码
这段代码运行起来没有问题,就是我的 while 判断条件比其他写的长得多。。。可是如果不判断,那么 num 如果特别大或者特别小就会出现 out of range 错误。怎么改的简洁点呢?
------解决方案--------------------
beg >= 0 ?这句话貌似没必要吧因为beg始终没有减过不存在小于0的情况
------解决方案--------------------
bool fd(vector <int> &vec,int num)
{
bs(vec);
vector <int>::size_type i = 0, beg = 0, end = vec.size() - 1, mid = 0;
while (beg<=end)
{
mid = (beg + end)/2;
if ( vec[mid] < num)
beg = mid + 1;
else if ( vec[mid] > num )
end = mid - 1;
else return true;
}
return false;
}
- C/C++ code
bool fd(vector <int> &vec,int num) { bool rtr = false; bs(vec); vector <int>::size_type i = 0, beg = 0, end = vec.size() - 1, mid = 0; while (beg < vec.size() && beg >= 0 && end >= 0 && end < vec.size() && vec[beg] <= vec[end]) { mid = (beg + end)/2; if ( vec[mid] < num) beg = mid + 1; else if ( vec[mid] > num ) end = mid - 1; else { rtr = true; break; } } return rtr; }
这段代码运行起来没有问题,就是我的 while 判断条件比其他写的长得多。。。可是如果不判断,那么 num 如果特别大或者特别小就会出现 out of range 错误。怎么改的简洁点呢?
------解决方案--------------------
beg >= 0 ?这句话貌似没必要吧因为beg始终没有减过不存在小于0的情况
------解决方案--------------------
bool fd(vector <int> &vec,int num)
{
bs(vec);
vector <int>::size_type i = 0, beg = 0, end = vec.size() - 1, mid = 0;
while (beg<=end)
{
mid = (beg + end)/2;
if ( vec[mid] < num)
beg = mid + 1;
else if ( vec[mid] > num )
end = mid - 1;
else return true;
}
return false;
}