当前位置: 面试刷题>> 前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]` 中,基点是 `5`、`3` 和 `6`。 **注意**: - 数组长度 `n` 的范围是 `[1, 10^4]`。 - `k` 的取值范围是 `[1, n]`。 - 数组中的元素范围是 `[-10^5, 10^5]`。 ### PHP 示例代码 ```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 示例代码 ```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 示例代码 ```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)); ``` **码小课**:在算法和数据结构的学习中,掌握如何高效地找出数组中的特定元素(如本题中的基点)是非常重要的。码小课网站中有更多关于算法和数据结构的精彩内容,包括详细的教程、实战项目和面试题解析,欢迎大家前来学习交流。
推荐面试题