当前位置: 面试刷题>> 前k高的基点 (经典算法题500道)


完整题目描述

题目:给定一个整数数组 nums 和一个整数 k,找出数组中高度排名前 k 的基点(即数组中大于或等于它两侧相邻元素的元素)。如果某个基点两侧没有相邻元素,则它也视为一个有效的基点。要求返回这 k 个基点的值,按照它们在原数组中出现的顺序排列。如果数组中基点的数量少于 k,则返回所有基点。

示例

输入:nums = [1, 3, 5, 2, 3, 4, 1, 6]k = 3 输出:[5, 3, 6] 解释:在数组 [1, 3, 5, 2, 3, 4, 1, 6] 中,基点是 536

注意

  • 数组长度 n 的范围是 [1, 10^4]
  • k 的取值范围是 [1, n]
  • 数组中的元素范围是 [-10^5, 10^5]

PHP 示例代码

function findKPeaks($nums, $k) {
    $n = count($nums);
    $peaks = [];
    
    for ($i = 0; $i < $n; $i++) {
        // 边界条件或当前元素大于两侧相邻元素
        if (($i == 0 || $nums[$i] >= $nums[$i - 1]) && 
            ($i == $n - 1 || $nums[$i] >= $nums[$i + 1])) {
            $peaks[] = $nums[$i];
            
            // 如果已经找到足够的基点,可以提前退出循环
            if (count($peaks) == $k) {
                break;
            }
        }
    }
    
    // 如果找到的基点数量少于 k,则直接返回所有基点
    return array_slice($peaks, 0, $k);
}

// 测试示例
$nums = [1, 3, 5, 2, 3, 4, 1, 6];
$k = 3;
print_r(findKPeaks($nums, $k));

Python 示例代码

def findKPeaks(nums, k):
    peaks = []
    n = len(nums)
    
    for i in range(n):
        # 边界条件或当前元素大于两侧相邻元素
        if (i == 0 or nums[i] >= nums[i - 1]) and (i == n - 1 or nums[i] >= nums[i + 1]):
            peaks.append(nums[i])
            
            # 如果已经找到足够的基点,可以提前退出循环
            if len(peaks) == k:
                break
                
    # 如果找到的基点数量少于 k,则直接返回所有基点
    return peaks[:k]

# 测试示例
nums = [1, 3, 5, 2, 3, 4, 1, 6]
k = 3
print(findKPeaks(nums, k))

JavaScript 示例代码

function findKPeaks(nums, k) {
    let peaks = [];
    const n = nums.length;
    
    for (let i = 0; i < n; i++) {
        // 边界条件或当前元素大于两侧相邻元素
        if ((i === 0 || nums[i] >= nums[i - 1]) && (i === n - 1 || nums[i] >= nums[i + 1])) {
            peaks.push(nums[i]);
            
            // 如果已经找到足够的基点,可以提前退出循环
            if (peaks.length === k) {
                break;
            }
        }
    }
    
    // 如果找到的基点数量少于 k,则直接返回所有基点
    return peaks.slice(0, k);
}

// 测试示例
const nums = [1, 3, 5, 2, 3, 4, 1, 6];
const k = 3;
console.log(findKPeaks(nums, k));

码小课:在算法和数据结构的学习中,掌握如何高效地找出数组中的特定元素(如本题中的基点)是非常重要的。码小课网站中有更多关于算法和数据结构的精彩内容,包括详细的教程、实战项目和面试题解析,欢迎大家前来学习交流。

推荐面试题