c++如何查找队列波峰波谷(波峰波谷的差值>4)?
各位老师,c++如何查找队列波峰波谷,从左到右第一个到最后1个都算,(加一个阈值A=4,波峰波谷的差值>4)?查找了很多案例,加阈值A=4后,出来结果都不正确?那位老师有正确的方法?谢谢了,下面是源码,出来的值有问题#include <iostream>#include <vector>
class Solution
{
public:
void findPeakValley(const std::vector<int> &nums, int &peakValue, int &valleyValue, int A)
{
int cur = 0, pre = 0;
for (int i = 1; i < nums.size(); i++)
{
int cur = nums - nums;
if (cur > 0 && pre <= 0 && nums <= valleyValue + A)
{
valleyValue = nums;
}
else if (cur < 0 && pre >= 0 && nums >= peakValue - A)
{
peakValue = nums;
}
pre = cur;
}
// 处理最后一个元素
if (nums.size() >= 2)
{
if (nums > nums && nums >= peakValue - A)
{
peakValue = nums;
}
else if (nums < nums && nums <= valleyValue + A)
{
valleyValue = nums;
}
}
}
};
int main()
{
std::vector<int> nums = { 1, 17, 13, 5, 10, 15, 11, 16, 8, 11, 9, 14 };
Solution solution;
int peakValue = 0;
int valleyValue = 0;
int A = 5; // 限制值
solution.findPeakValley(nums, peakValue, valleyValue, A);
if (peakValue != 0)
{
std::cout << "最后一个波峰值为: " << peakValue << std::endl;
}
else
{
std::cout << "未找到波峰" << std::endl;
}
if (valleyValue != 0)
{
std::cout << "最后一个波谷值为: " << valleyValue << std::endl;
}
else
{
std::cout << "未找到波谷" << std::endl;
}
system("pause");
return 0;
} 对nums排个序,取出最大最小值,若二者的差大于A,即为波峰波谷值,否则,不存在波峰波谷值,是这个理解么 绵绵青山 发表于 2023-9-30 11:23
对nums排个序,取出最大最小值,若二者的差大于A,即为波峰波谷值,否则,不存在波峰波谷值,是这个理解么
老师,下面图中的排列 jtwc 发表于 2023-9-30 11:30
老师,下面图中的排列
不是很明白,你预期的结果是什么 绵绵青山 发表于 2023-9-30 11:50
不是很明白,你预期的结果是什么
波峰波谷的差值>4,只要数字大于前1个波谷+4就是波峰,几个取最大的,只要数字小于前1个波峰-4就是波谷,几个取最小的,最后1个数参加选取 我想问的是,就你提供的nums而言,你的代码结果波峰是14,波谷是9,你期望的波峰是哪个,波谷是哪个 这个题二分查找是最高效的方法 jamesAbc 发表于 2023-9-30 12:26
这个题二分查找是最高效的方法
关键是出来的结果要正确才行
页:
[1]