吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 657|回复: 7
收起左侧

[求助] c++如何查找队列波峰波谷(波峰波谷的差值>4)?

[复制链接]
jtwc 发表于 2023-9-30 09:34
各位老师,c++如何查找队列波峰波谷,从左到右第一个到最后1个都算,(加一个阈值A=4,波峰波谷的差值>4)?查找了很多案例,加阈值A=4后,出来结果都不正确?那位老师有正确的方法?谢谢了,下面是源码,出来的值有问题
[C++] 纯文本查看 复制代码
#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[i] - nums[i - 1];
			if (cur > 0 && pre <= 0 && nums[i - 1] <= valleyValue + A)
			{
				valleyValue = nums[i - 1];
			}
			else if (cur < 0 && pre >= 0 && nums[i - 1] >= peakValue - A)
			{
				peakValue = nums[i - 1];
			}
			pre = cur;
		}
		// 处理最后一个元素
		if (nums.size() >= 2)
		{
			if (nums[nums.size() - 1] > nums[nums.size() - 2] && nums[nums.size() - 1] >= peakValue - A)
			{
				peakValue = nums[nums.size() - 1];
			}
			else if (nums[nums.size() - 1] < nums[nums.size() - 2] && nums[nums.size() - 1] <= valleyValue + A)
			{
				valleyValue = nums[nums.size() - 1];
			}
		}
	}
};

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;
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

绵绵青山 发表于 2023-9-30 11:23
对nums排个序,取出最大最小值,若二者的差大于A,即为波峰波谷值,否则,不存在波峰波谷值,是这个理解么
 楼主| jtwc 发表于 2023-9-30 11:30
绵绵青山 发表于 2023-9-30 11:23
对nums排个序,取出最大最小值,若二者的差大于A,即为波峰波谷值,否则,不存在波峰波谷值,是这个理解么

老师,下面图中的排列
1.png
绵绵青山 发表于 2023-9-30 11:50
 楼主| jtwc 发表于 2023-9-30 11:57
绵绵青山 发表于 2023-9-30 11:50
不是很明白,你预期的结果是什么

波峰波谷的差值>4,只要数字大于前1个波谷+4就是波峰,几个取最大的,只要数字小于前1个波峰-4就是波谷,几个取最小的,最后1个数参加选取
绵绵青山 发表于 2023-9-30 12:11
我想问的是,就你提供的nums而言,你的代码结果波峰是14,波谷是9,你期望的波峰是哪个,波谷是哪个
jamesAbc 发表于 2023-9-30 12:26
这个题二分查找是最高效的方法
 楼主| jtwc 发表于 2023-9-30 12:29
jamesAbc 发表于 2023-9-30 12:26
这个题二分查找是最高效的方法

关键是出来的结果要正确才行
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表