网站客服:zx81024163 |

爱那句话歌 https://blog.csdn.net/m0_74031997/article/details/143729131

2025-04-06 14:02:07发布    浏览267次    信息编号:222387

友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。

爱那句话歌 https://blog.csdn.net/m0_74031997/article/details/143729131

个人问题清单

团队问题清单

节省

问题提供者是孤独感

遇到困难

历史分数100

提交记录以查看问题

标签

Luogu原创

查看算法标签

输入讨论版本

相关讨论

查看讨论

推荐主题

查看建议

复制并扩展

问题背景

(这个标题隐藏了两个歌曲,找出在哪里阅读~~~)

“爱与悲伤的故事”的第1章

在《我是疯狂的歌》中,吴西凯的神圣歌曲“舞月”并没有被sa丁丁赢得。爱与悲伤之神是伤心欲绝的~~~,最近有一些可悲的事情令人心碎(我最近真的很烦人)。

问题描述

最近,我有一件坏事,每个句子都有积极的整数刺痛价值(非常差的心理耐力)。伟大的大师爱与悲伤想知道连续的MM刺痛价值的最低价值,但是由于繁忙的业务,伟大的大师的爱和悲伤不得不要求您编写一个程序来告诉他。

输入格式

第一行的两个整数分别由空间隔开,分别代表NN和MM。

从第22行到(n+1)(n+1),每条线都有一个整数,并且在行(i+1)(i+1)(i+1)(i+1)中的整数AIAI表示IITH事物的刺激值AIAI。

输出格式

在连续输出整数,指示连续MM STING值之和的最小值是多少。

输入和输出示例

输入#1复制

8 3
1
4
7
3
1
2
4
3

输出#1副本

6

描述/提示数据大小和协议

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Practise___11._12_Love_and_Heart___number2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            LoveHeart(); // 调用 LoveHeart 方法
            Console.ReadKey(); // 等待用户按下任意键
        }
        static void LoveHeart()
        {
            string[] firstline = Console.ReadLine().Split(' '); // 从控制台读取一行输入并按空格分割成字符串数组
            int n = int.Parse(firstline[0]); // 将第一个字符串转换为整数 n
            int m = int.Parse(firstline[1]); // 将第二个字符串转换为整数 m
            int[] a = new int[n]; // 创建一个长度为 n 的整数数组 a
            for (int i = 0; i < n; i++)
            {
                a[i] = int.Parse(Console.ReadLine()); // 从控制台读取 n 个整数并存入数组 a
            }
            int minSum = int.MinValue; // 初始化最小和为一个很大的数(实际上应该是 int.MaxValue)
            int currentSum = 0; // 用于计算当前窗口的和
            for (int i = 0; i < m; i++)
            {
                currentSum += a[i]; // 计算第一个窗口的和
            }
            minSum = currentSum; // 将第一个窗口的和赋值给 minSum
            // 使用滑动窗口计算后续的和
            for (int i = m; i < n; i++)
            {
                currentSum += a[i] - a[i - m]; // 更新当前窗口的和
                if (currentSum < minSum) // 如果当前窗口的和小于 minSum
                {
                    minSum = currentSum; // 更新 minSum
                }
            }
            Console.WriteLine(minSum); // 输出最小和
        }
    }
}

解释:

初始化窗口:首先,代码计算数组A中的第一个M元素的总和,该总和称为当前窗口的总和()。该窗口的大小为m。

更新最小值:将当前窗口的总和与已知最小总和()进行比较,然后更新最低总和。

滑动窗口:接下来,代码通过移动窗口来计算后续总和。具体而言,当窗口向右滑动时:

继续更新最小总和:每次滑动窗口后,检查当前窗口的总和小于已知的最低总和并进行更新。

这样,代码可以在O(n)的时间复杂性内找到长度M的最小总和,而无需使用嵌套环来计算每个子阵列的总和,这更有效。

总而言之,滑动窗口是一种有效的算法设计模式,适合处理连续的子阵列问题,并且可以显着降低计算的复杂性。

提醒:请联系我时一定说明是从星空网上看到的!