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