字节二面代码题

求一个数组元素和最大的连续子序列
如 a = [-1,2,-1,3,4,5,-20,8]
返回 b = [2,-1,3,4,5]

思路:

vector<int> v{-1,2,-1,3,4,5,-20,8};

int main()
{
    int n = 8;

    int sum, ans, st, ed, ans_st, ans_ed;
    sum = ans = st = ed = ans_st = ans_ed = v[0];

    for (int i = 1; i < n; i++)
    {
        if (sum >= 0) // 和为正,继续加
        {
            sum += v[i];
            ed = v[i]; // 更新tail
        }
        else // 和为负,则当前情况下,只取下边的第一个元素做和,并更新头尾
        {
            sum = v[i];
            st = v[i];
            ed = v[i];
        }
        if (sum > ans)
        {
            ans = sum;
            ans_st = st;
            ans_ed = ed;
        }
    }
    if (ans >= 0)
    {
        cout << ans_st << " " << ans_ed << endl;
    } else
    {
        cout << v[0] << v[n - 1] << endl;
    }
    return 0;
}

https://blog.csdn.net/qq_39813898/article/details/81478769
这个好好看看
https://blog.csdn.net/yuanba_xs/article/details/56674678

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值