25| 丢手绢

代码实现

cpp 复制代码
typedef long long ll;
const int N = 2e5 + 10; // 因为要拼接数组,所以长度翻倍
ll a[N], tmp, ret;
int main()
{
    int n; cin >> n;
    ll circ = 0;
    for (int i = 1; i <= n; i++) 
    {
        cin >> a[i];
        circ += a[i];
        a[i + n] = a[i]; // 拼接数组,处理环形
    }
    int l = 1;
    tmp = 0, ret = 0;
    for (int r = 1; r <= 2 * n; r++) // 遍历到2n
    {
        tmp += a[r];
        // 当当前和超过半周长时,从左边移出元素
        while (tmp > circ / 2)
        {
            tmp -= a[l];
            l++;
        }
        // 更新最大的最近距离
        ret = max(ret, tmp);
        // 防止窗口长度超过n(即绕回一圈以上)
        if (r - l + 1 > n)
        {
            tmp -= a[l];
            l++;
        }
    }
    cout << ret << endl;
}
cpp 复制代码
typedef long long ll;
const int N = 1e5 + 10;
ll a[N], tmp, ret;
int main()
{
	int n; cin >> n;
	ll circ = 0;
	for (int i = 1; i <= n; i++) 
	{
		cin >> a[i];
		circ += a[i];
	}
	int l = 1, r = 1;
	while (r <= n)
	{
		// 入窗口
		tmp += a[r];
		// 判断
		while (tmp * 2 > circ)
		{
			ret = max(ret, circ - tmp);
			// 出窗口
			tmp -= a[l];
			l++; 
		 } 
		 
		// 更新结果
		ret = max(ret, tmp); 
		r++;
	}
	cout << ret << endl;
 } 
相关推荐
碧海银沙音频科技研究院2 小时前
炬芯ATS3089X手表的HFP通话不自动路由到设备BT的问题解决
网络·人工智能·嵌入式硬件·算法
mmmmath_37 小时前
LeetCode.199.二叉树的右视图
数据结构·leetcode
专注仿真7 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
码爸8 小时前
支持向量机介绍与示例
算法·机器学习·支持向量机
怕浪猫8 小时前
2028编程圈很火的10个Skills
算法·面试·github
滕州市燕猫虎计算机科技工作室个体工商户8 小时前
《Rust程序设计》学习笔记八:结构体
笔记·学习·rust·rust程序设计
别动我齐刘海9 小时前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人
志尊宝10 小时前
Vue3 零基础每日笔记(082):文件上传实战——el-upload 校验、自定义上传、头像预览
前端·javascript·vue.js·笔记·#javascript·#vue.js
后季暖11 小时前
电商问数笔记(2)
笔记