有序数组Floor值求解代码遇超时及运行错误,求无STL优化方案
有序数组Floor值的优化实现
原代码存在的问题
- 数组采用传值方式
vector<long long> v,会复制整个数组,大数据量下会因内存开销过大导致超时 - 返回值类型为
int,但数组元素是long long,当元素值超出int范围时会发生溢出,引发运行错误 - 找到与目标值相等的元素后未终止循环,仍继续遍历,做无用功浪费时间
优化后的实现代码
long long findFloor(const vector<long long>& v, long long n, long long x) { long long start = 0, end = n - 1; long long res = -1; while (start <= end) { long long mid = start + (end - start) / 2; if (v[mid] == x) { // 找到目标值直接返回,这就是符合要求的最大元素 return v[mid]; } else if (v[mid] < x) { // 当前元素符合条件,记录后向右寻找更大的候选值 res = v[mid]; start = mid + 1; } else { // 当前元素过大,向左缩小搜索范围 end = mid - 1; } } return res; }
优化说明
- 传引用替代传值:将数组参数改为
const vector<long long>& v,避免复制整个数组,大幅降低内存占用和时间消耗,解决超时问题 - 类型匹配:返回值类型改为
long long,与数组元素类型保持一致,避免数值溢出导致的运行错误 - 提前终止循环:找到与目标值相等的元素时直接返回,无需继续遍历,减少不必要的计算
内容的提问来源于stack exchange,提问作者Prathu
相关产品推荐
相关产品推荐

