| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 514 人关注过本帖
标题:最大字数组求解:请大家帮我纠正错误
只看楼主 加入收藏
yx1998
Rank: 2
等 级:论坛游民
威 望:1
帖 子:30
专家分:35
注 册:2015-7-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
最大字数组求解:请大家帮我纠正错误
void Max_Cross_Array(int num[],int low,int high,int * index_l,int * index_h,int * sum)
{
    int mid=(low+high)/2;//mid
    int l_max,r_max,temp;//最大值存储,当前值存储
    int l,r,l_low,r_high;
    l_low=mid;//左侧保存点
    r_high=mid+1;//右侧保存
    for(l=mid,l_max=0,temp=0;l>=low;l--)
    {
        temp+=num[l];
        if(temp>=l_max)
        {
            l_max=temp;
            l_low=l;
        }
    }
    for(r=mid+1,r_max=0,temp=0;r<=high;r++)
    {
        temp+=num[r];
        if(temp>=r_max)
        {
            r_max=temp;
            r_high=r;
        }
    }
    *index_l=l_low;
    *index_h=r_high;
    *sum=l_max+r_max;
}
void Max_Subarray (int * A,int * low,int * high,int * sum)
{
    printf("%d ",count++);
    if(*low==*high)
    *sum=A[*low];
    else{
        int mid=(*low+*high)/2;
        int l,r;
        l=*low;r=*high;
        *low=l;*high=mid;
        Max_Subarray(A,low,high,sum);
        left_low=*low;
        left_high=*high;
        left_sum=*sum;
        
        *low=mid+1;
        *high=r;
        right_low=*low;
        right_high=*high;
        right_sum=*sum;
        
        *low=l;
        *high=r;
        Max_Cross_Array(A,*low,*high,low,high,sum);
        cross_low=*low;
        cross_high=*high;
        cross_sum=*sum;
        
        if(cross_sum>=right_sum&&cross_sum>=left_sum)
        {
            *low=left_low;
            *high=left_high;
            *sum=left_sum;
        }
        else if(right_sum>=left_sum&&right_sum>=cross_sum)
        {
            *low=right_low;
            *high=right_high;
            *sum=right_sum;
        }
        else
        {
            *low=left_low;
            *high=left_high;
            *sum=left_sum;
        }
    }
}
这是两个函数的代码。
搜索更多相关主题的帖子: 最大值 
2015-07-24 22:09
yx1998
Rank: 2
等 级:论坛游民
威 望:1
帖 子:30
专家分:35
注 册:2015-7-24
收藏
得分:0 
不好意思,题目打错了,是最大子数组(连续的)

静心学习,远离浮躁。
2015-07-24 22:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9032
专家分:54061
注 册:2011-1-18
收藏
得分:7 
听不懂,不想猜
连要求都表达不清楚的话,学编程太早了
2015-07-25 10:59
yx1998
Rank: 2
等 级:论坛游民
威 望:1
帖 子:30
专家分:35
注 册:2015-7-24
收藏
得分:0 
回复 3楼 rjsp
最大子数组你听不懂?你学过算法吗?

静心学习,远离浮躁。
2015-07-25 20:39
yx1998
Rank: 2
等 级:论坛游民
威 望:1
帖 子:30
专家分:35
注 册:2015-7-24
收藏
得分:0 
那我详细解释一下。
一共设计了两个函数。目的是求解一个int数组里的最大子数组,最后的返回值包括最大连续子数组左侧的下标,以及右侧的下标,和最大子数组的和。
一个数组内子数组分为三种情况:第一种是子数组在数组中间数字的左侧;第二种是跨越中间数字;第三种是在数组中间数字的右侧。
第一个函数Max_Cross_Array目的在于求解一个跨越中间值的最大子数组。
第二个函数用分治算法的思想,将一个数组不断二分化,求解最大子数组。
还有就是,我不明白3楼的“太早了”是什么意思。是觉得自己有太阳或者是发的帖子多,在这里倚老卖老吗?

静心学习,远离浮躁。
2015-07-25 20:44
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:7 
以下是引用yx1998在2015-7-25 20:44:24的发言:

那我详细解释一下。
一共设计了两个函数。目的是求解一个int数组里的最大子数组,最后的返回值包括最大连续子数组左侧的下标,以及右侧的下标,和最大子数组的和。
一个数组内子数组分为三种情况:第一种是子数组在数组中间数字的左侧;第二种是跨越中间数字;第三种是在数组中间数字的右侧。
第一个函数Max_Cross_Array目的在于求解一个跨越中间值的最大子数组。
第二个函数用分治算法的思想,将一个数组不断二分化,求解最大子数组。
还有就是,我不明白3楼的“太早了”是什么意思。是觉得自己有太阳或者是发的帖子多,在这里倚老卖老吗?

你都已经把方法说出来了还有什么问题?

一片落叶掉进了回忆的流年。
2015-07-25 22:54
yx1998
Rank: 2
等 级:论坛游民
威 望:1
帖 子:30
专家分:35
注 册:2015-7-24
收藏
得分:0 
我的问题就是在实现的过程中出现了错误,并且不知道原因,来这里请求大家帮我检查一下。

静心学习,远离浮躁。
2015-07-26 09:21
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
寻找子列不是有函数嘛

一片落叶掉进了回忆的流年。
2015-07-26 12:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9032
专家分:54061
注 册:2011-1-18
收藏
得分:0 
以下是引用yx1998在2015-7-25 20:44:24的发言:

还有就是,我不明白3楼的“太早了”是什么意思。是觉得自己有太阳或者是发的帖子多,在这里倚老卖老吗?
“最大子数组(连续的)”中的“最大”指的是什么最大?
是 乘积最大,还是 绝对值之和最大?是均方差最大,还是单调递增数量最大?……
说你“太早了”还不服气,丢人
2015-07-27 09:22
快速回复:最大字数组求解:请大家帮我纠正错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017943 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved