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;
 } 
相关推荐
盐焗西兰花19 小时前
鸿蒙学习实战之路-Share Kit系列(10/17)-目标应用接收分享(应用内处理)
学习·华为·harmonyos
TracyCoder12319 小时前
LeetCode Hot100(65/100)——64. 最小路径和
算法·leetcode·职场和发展
z2014z19 小时前
Deflate 算法详解
网络·算法
条tiao条19 小时前
从 “Top-K 问题” 入门二叉堆:C 语言从零实现与经典应用
c语言·算法·深度优先
LXS_35719 小时前
案例 —— 机房预约系统
开发语言·c++·学习方法
uesowys19 小时前
华为OD算法开发指导-数据结构-图
数据结构·算法·华为od
高梦轩19 小时前
LNMP 环境部署笔记
linux·笔记
实心儿儿19 小时前
算法3:链表分割
数据结构·算法·链表
yeflx19 小时前
C++纯虚接口
开发语言·c++
清空mega19 小时前
《Vue3 新手学习路线总览:我该怎么系统学 Vue3?》
学习