c++贪心算法如何加1个控制值呢?
各位老师,#include <iostream>#include <vector>
class Solution {
public:
void findPeakValley(const std::vector<int>& nums, int& peakValue, int& valleyValue) {
int cur = 0, pre = 0;
for (int i = 1; i < nums.size(); i++) {
int cur = nums - nums;
if (cur > 0 && pre <= 0) {
valleyValue = nums;
}
else if (cur < 0 && pre >= 0) {
peakValue = nums;
}
pre = cur;
}
// 处理最后一个元素
if (nums.size() >= 2) {
if (nums > nums) {
peakValue = nums;
}
else if (nums < nums) {
valleyValue = nums;
}
}
}
};
int main() {
std::vector<int> nums = { 1, 17, 13, 5, 10, 15, 11, 16, 8, 11 };
Solution solution;
int peakValue = 0;
int valleyValue = 0;
solution.findPeakValley(nums, peakValue, valleyValue);
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;
}c++贪心算法如何加1个控制值呢?下面是找波峰、波谷代码,给上面的代码加入限制值A=4的代码,小于波峰-4的数才是波谷,大于波谷+4的数才是波峰,该如何写呢?谢谢了 如果你想要添加一个控制值,你可以在findPeakValley函数的参数列表中加入一个额外的整型变量,比如int controlValue。然后在程序中对该变量进行适当的赋值和使用。
下面是修改后的代码示例:#include <iostream>
#include <vector>
class Solution {
public:
void findPeakValley(const std::vector<int>& nums, int& peakValue, int& valleyValue, int controlValue) {
int cur = 0, pre = 0;
for (int i = 1; i < nums.size(); i++) {
int cur = nums - nums;
if (cur > 0 && pre <= 0) {
valleyValue = nums;
}
else if (cur < 0 && pre >= 0) {
peakValue = nums;
}
pre = cur;
}
// 处理最后一个元素
if (nums.size() >= 2) {
if (nums > nums) {
peakValue = nums;
}
else if (nums < nums) {
valleyValue = nums;
}
}
// 使用控制值
std::cout << "控制值为: " << controlValue << std::endl;
}
};
int main() {
std::vector<int> nums = { 1, 17, 13, 5, 10, 15, 11, 16, 8, 11 };
Solution solution;
int peakValue = 0;
int valleyValue = 0;
int controlValue = 100;// 添加一个控制值并初始化
solution.findPeakValley(nums, peakValue, valleyValue, controlValue);
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;
}
在上面的代码中,我添加了一个名为controlValue的整型变量,并在findPeakValley函数调用时传入了一个值为100的控制值。然后,你可以在函数的适当位置使用该控制值,比如在最后输出语句中打印出来。当然,你可以根据需要对控制值进行其他操作。 yanyujiangnanya 发表于 2023-9-29 11:03
如果你想要添加一个控制值,你可以在findPeakValley函数的参数列表中加入一个额外的整型变量,比如int cont ...
非常感谢老师,我试试,谢谢老师 本帖最后由 jtwc 于 2023-9-29 11:43 编辑
yanyujiangnanya 发表于 2023-9-29 11:03
如果你想要添加一个控制值,你可以在findPeakValley函数的参数列表中加入一个额外的整型变量,比如int cont ...
老师出来的结果咋不正确呢? int controlValue = 4;std::vector<int> nums = { 1, 17, 13, 5, 10, 15, 11, 16, 8, 11, 9 };最后一个波峰值为: 11 最后一个波谷值为: 9 , 最后一个波峰值应该是16,最后一个波谷值应该是8 jtwc 发表于 2023-9-29 11:38
老师出来的结果咋不正确呢? int controlValue = 4;std::vector nums = { 1, 17, 13, 5, 10, 15, 11, 1 ...
其实只要改一下if条件即可
```cpp
#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};
Solution solution;
int peakValue = 0;
int valleyValue = 0;
int A = 4; // 限制值
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;
}
```
我实测没问题(忽略编码问题)
```text
PS E:\> g++ main.cpp -o main
PS E:\> ./main
鏈?鍚庝竴涓尝宄板?间负: 16
鏈?鍚庝竴涓尝璋峰?间负: 8
请按任意键继续. . .
PS E:\>
``` hrh123 发表于 2023-9-29 12:19
其实只要改一下if条件即可
```cpp
#include
谢谢老师,老师队列{ 1, 17, 13, 5, 10, 15, 11, 16, 8, 11, 9 },输出为:最后一个波峰值为: 16
最后一个波谷值为: 9, 最后一个波谷值应该为:8 jtwc 发表于 2023-9-29 13:40
谢谢老师,老师队列{ 1, 17, 13, 5, 10, 15, 11, 16, 8, 11, 9 },输出为:最后一个波峰值为: 16
最后一 ...
我现在人在外面,不方便测试,大致看了下,应该是哪个地方等号没加对,你自己改下试试 hrh123 发表于 2023-9-29 13:57
我现在人在外面,不方便测试,大致看了下,应该是哪个地方等号没加对,你自己改下试试
谢谢老师,我再试试 jtwc 发表于 2023-9-29 14:06
谢谢老师,我再试试
等一下,最后1个波谷好像就是9吧{:301_1009:}
我哪里搞错了也见谅哈{:301_1007:} hrh123 发表于 2023-9-29 14:53
等一下,最后1个波谷好像就是9吧
我哪里搞错了也见谅哈
老师,最后一个波峰值为: 16,之后是8,8比16小8是波谷,之后是11,11-8<4,还是波谷,之后是9,11-9<4,还是波谷,8、11、9最小值为波谷就是8
页:
[1]
2