问题标题: 酷丁编程:这题咋写

1
1
张茵博
张茵博
资深守护
资深守护

4091   酷町猫拔栅栏

经验值:800

时间限制:1000毫秒

内存限制:128MB

题目描述 De**ion

酷町猫家前面有一道栅栏。围栏由n块宽度相同的木板组成,从左到右依次排列。第i块木板的高度为hi米,不同的木板可以有不同的高度。酷町猫现在要拔掉k块木板,以方便把他新买的沙发搬进家。他需要从栅栏上连续拿下K块木板。高的木板更难从栅栏上拆下来,所以酷町猫希望找到这样的K块连续木板,使得它们的高度之和是最小的。现在请你编写一个程序,计算连续拔的k块木板的最小高度和,输出最小高度情况下的开始木板序号。

输入描述 Input De**ion

第一行输入n和k,表示木板的个数以及需要拔木板的个数
第二行n个数,h1、h2、…、hn,分别表示第一块到第n块木板的高度

输出描述 Output De**ion

输出整数j,使木板高度j,j+1,…,j+k-1之和为最小值。如果有多个这样的J,打印其中第一个。

 

 

 

 

给个思路就行了


1
任和毅
任和毅
中级守护
中级守护

题目要求:

  • 从 n 块木板里,找连续 k 块
  • 它们的高度和最小
  • 输出最左边的那个起始位置
  • 读入 n、k 和高度数组
  • 先计算第一个窗口(1~k)的和把它当作当前最小和,位置记为 1
  • 从第 k+1 个数开始往后遍历
    • 新窗口和 = 旧和 - 最左边出去的数 + 右边新进来的数
    • 如果这个新和 比当前最小和更小→ 更新最小和,并记录当前窗口的起始位置
    • 如果和相等,不更新,保留最早出现的位置
0
我要回答