问题描述
给定一个整数 k 和一个整数数组 arr,找出 arr 中小于 k 的最大整数,并返回它的下标。如果不存在这样的元素,则返回 -1。
示例 1: 输入: k = 5, arr = [3, 4, 5, 2, 7] 输出: 2(因为 arr[2] = 4 是小于 5 的最大整数)
示例 2: 输入: k = 1, arr = [1, 0, 1] 输出: 1(因为 arr[1] = 0 是小于 1 的最大整数)
示例 3: 输入: k = 7, arr = [7, 8, 9] 输出: -1(因为不存在小于 7 的整数)
解法一
解题思路:
我们需要遍历数组,找到小于 k 的最大整数。为了实现这一点,我们可以维护一个变量来存储当前找到的最大值及其索引。遍历数组时,如果发现一个元素小于 k 并且大于当前最大值,我们就更新这个变量。最后,如果找到了这样的元素,返回其索引;否则返回 -1。
/*
* @lc app=leetcode.cn id=908 lang=javascript
*
* [908] Smallest Range I
*/
// @lc code=start
function smallestRangeI(k, arr) {
let maxVal = -Infinity;
let minVal = Infinity;
let ans = -1;
for (let i = 0; i < arr.length; i++) {
if (arr[i] < k) {
if (arr[i] > maxVal) {
maxVal = arr[i];
ans = i;
}
} else {
minVal = Math.min(minVal, arr[i]);
}
}
return ans;
}
// @lc code=end