C语言----山谷挑战(Challenging Valleys),最简单方法

本文介绍如何利用分治法解决编程问题,针对给定数组表示的山高度,判断是否为山谷(满足不严格递增或递减)。通过找到最小值并分治数组,分析两个部分是否遵循相应规则来确定是否为山谷数组。
摘要由CSDN通过智能技术生成

①问题(来源 CodeForces Problem - 1760D)

问题如图所示

最简单地概括,一个数组表示山的高度,如果数组大小排布如图一二所示,即为山谷;

即山谷数组要么就不严格递增(情况①)。要么就先不严格递减到最小,再不严格递增(情况②);

②输入输出描述:

输入几组数据,每组多少元素,每个元素多少,老套路了....

③代码示例:

④思路:

采用分治法,即不论是情况①or②,都是在最小值前不严格递减,在最小值后不严格递增的。

那么,

我们可以先遍历出最小值min,

再以min值为标准,分治两路,I路从数组第一个到min值,II路从min值到数组最后一个。

I路若遵循不严格递减,则判断1(即pol1为真)为真。

II路若遵循不严格递增,则判断2(即pol2为真)为真。

因为此代码在分治之前pol1,2全为1(即真),

若两路都为真,则pol1,2都还是1,

不是0,此时的数组为“山谷”。

若其中某一路不成立或者两路均不成立,则pol1,2对应=0,即为假。

此时数组不是“山谷”。

④思考

大家可以自己在脑中自己画一张图,山谷中不会有凸起,便可以理解

凭借此题,做山峰的题也是一样步骤,只不过更加复杂,

也可以作为分治法的一个例题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值