如何获取数组中大于等于给定值且小于下一个相邻元素的对应基准值
可行实现方案
前置处理
- 先将从数据库取出的字符串格式数组统一转换为数值类型,避免字符串比较出现逻辑偏差
- 对转换后的数值数组做升序排序,确保元素从小到大有序排列,你的示例数组处理后为
[5, 10, 25]
核心判断逻辑
你之前的逻辑错误是没有同时匹配两个判断条件:给定值大于等于当前元素 且 给定值小于当前元素的下一个元素,正确的实现逻辑如下(以JavaScript为例):
function findBenchmark(sortedArr, givenNum) { const len = sortedArr.length // 给定值小于第一个元素时可根据业务需求调整返回值,示例返回null if (givenNum < sortedArr[0]) return null // 给定值大于等于最后一个元素,直接返回最后一个元素 if (givenNum >= sortedArr[len - 1]) return sortedArr[len - 1] // 遍历数组匹配条件 for (let i = 0; i < len - 1; i++) { const current = sortedArr[i] const next = sortedArr[i + 1] if (givenNum >= current && givenNum < next) { return current } } }
测试验证
用示例数组[5, 10, 25]测试:
- 给定值为5:满足
5 >=5 && 5 <10→ 返回5 - 给定值为9:满足
9 >=5 && 9 <10→ 返回5 - 给定值为10:满足
10 >=10 && 10 <25→ 返回10 - 给定值为30:大于等于最后一个元素25 → 返回25
如果你的数组元素量很大(超过1000条),可以把遍历逻辑替换为二分查找,时间复杂度可以从O(n)降到O(logn),性能更好。
内容的提问来源于stack exchange,提问作者m ihsan
相关产品推荐
相关产品推荐

