题解 | #连续子链表最大和#

连续子链表最大和

http://www.nowcoder.com/practice/650b68dfa69d492d92645aecd7da9b21

和之前求子数组的最大和一样的思路。
把当前链表和nowsum和所求链表和的最大值maxsum均设为第一个元素值,
然后从第二个元素值往后遍历,如果当前和小于0,那么就舍弃前面的求和,把当前值作为第一个元素开始求和,
如果当前和不小于0,那么就把当前值加入成为新的数组和,
再与最大数组和比较,并更新
int FindGreatestSumOfSubArray(struct ListNode* head ) {
    if(head == NULL)
         return 0;
    struct ListNode* p = head;
    int nowsum = p->val, maxsum = p->val;
    while(p->next != NULL){   //从头结点后面结点开始的
        if(nowsum < 0)
            nowsum = p->next->val;  //舍弃前面数组和,从当前再开始求和
        else
            nowsum += p->next->val;   //把当前值并入数组和
        if(maxsum < nowsum)
            maxsum = nowsum;    //比较,更新
        p = p->next;   //指针后移直到倒数第二个结点,最后一个结点不会进入while循环
    }
    return maxsum;
}








全部评论

相关推荐

牛客83265014...:完了,连现在都没开始面,13号投的是不是晚了
秋招的第一个offer,...
点赞 评论 收藏
分享
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务