Excel 365:从下往上查找数组中大于指定值的首个元素位置
从数组末尾查找第一个大于指定值的元素位置
问题说明
给定一个包含1到500连续整数的数组,要求从数组末尾开始向头部方向查找,找到第一个大于指定值(例如49)的元素位置,该位置即为结果。
解法思路
如果数组是升序排列(1到500的数组默认是升序),所有大于指定值的元素集中在数组后半段。从末尾开始遍历时,第一个遇到的元素必然是数组中最大的元素(500),它肯定大于指定值(只要指定值小于500),因此直接返回数组最后一个元素的位置即可。如果需要兼容非升序的数组场景,可以用通用的逆序遍历方法。
代码示例(JavaScript)
// 生成1到500的数组 const arr = Array.from({length: 500}, (_, i) => i + 1); const target = 49; // 通用逆序遍历解法 function findFirstGreaterFromEnd(arr, target) { // 从数组最后一个索引开始向前遍历 for (let i = arr.length - 1; i >= 0; i--) { if (arr[i] > target) { return i; // 返回0开始的索引,需1开始位置则返回i+1 } } return -1; // 所有元素都不大于目标值时返回-1 } const resultIndex = findFirstGreaterFromEnd(arr, target); console.log(`元素位置(0开始):${resultIndex}`); console.log(`对应元素:${arr[resultIndex]}`);
代码示例(Python)
# 生成1到500的数组 arr = list(range(1, 501)) target = 49 def find_first_greater_from_end(arr, target): # 从数组最后一个元素开始逆序遍历 for i in range(len(arr)-1, -1, -1): if arr[i] > target: return i # 返回0开始的索引,需1开始位置则返回i+1 return -1 # 无符合条件元素时返回-1 result_index = find_first_greater_from_end(arr, target) print(f"元素位置(0开始):{result_index}") print(f"对应元素:{arr[result_index]}")
升序数组的特殊优化
由于1到500的数组是严格升序的,若你实际需求是找到最靠近数组头部的大于指定值的元素,可以直接计算:大于target的最小元素是target+1,它的0开始索引为target(比如target=49时,元素50的索引是49)。但根据问题描述的“从末尾向上查找”逻辑,仍以逆序遍历的结果为准。
内容的提问来源于stack exchange,提问作者Imran Rafique
相关产品推荐
相关产品推荐

