erlang 求子陣列和的最大值

2021-06-14 11:06:58 字數 2068 閱讀 2344

前段時間修改為簡單方法

-module (son).

-export ([son/1]).

son(a) ->

son(a, 0, 0).

son(, max, _sum) ->

max;

son([head | list], max, sum) ->

new_sum = head + sum,

new_max = case new_sum > max of

true ->

new_sum;

_ -> max

end,

new_sum_1 = case new_sum > 0 of

true ->

new_sum;

_ -> 0

end,

son(list, new_max, new_sum_1).

今天看見一題關於求子陣列和的題目

就是資料中連續的數組成的陣列[1, 2, 3, 4, 5]  子陣列[1],[1, 2],[2,3,5]等。陣列中可能有多個負數所以求子陣列的最大值就必須對多個情況進行考慮,當我們使用其他語言的時候發現實現起來相對簡單,而erlang只能單一賦值,這就給erlang的邏輯處理新增很多的麻煩,這是erlang的優點,可是有時卻帶來麻煩。

第一次發表,寫了個小邏輯,感覺很繁瑣,請高人指點。

-module(test).

-export([sun_list/1,sun_list_sum/3,sum/1,sun_list/3]).

sun_list(list) -> %%輸入介面

length = length(list),

%%生成length長度列表

lengthlist=length_list(length,list),

%%遍歷所有列表

maxlist=sun_list(list,length,lengthlist,length,),

io:format("maxlist is~p~n",[maxlist]),

lists:max(maxlist).

sun_list(_list,0,_lengthlist,_lenght2,maxlist) -> maxlist;

sun_list(list,start,lengthlist,lenght2,maxlist)->

lengthlistnext = lists:reverse(lists:sublist(lengthlist,1,lenght2-start+1)),

max = sun_list_sum(list,start,lengthlistnext),

sun_list(list,start-1, lengthlist,lenght2,[max|maxlist]).

length_list(0,list) ->

list;

length_list(length,list) ->

length_list(length - 1,[length|list]).

sun_list(list,s,l) ->

listnext = lists:sublist(list, s, l),

sum(listnext).

sum(list) ->

sum = lists:foldl(

fun(x,sum) ->

x + sum

end,

0 ,list

),sum.

sun_list_sum(list,start,lengthlist) ->

sumlist=lists:foldl(

fun(x,lists) ->

[sun_list(list,start,x)|lists]

end,

,lengthlist),

lists:max(sumlist).

test:sun_list([1,2,3,5,7,(-1),(-1)]).                      

maxlist is[18,17,15,12,7,-1,-1]

18

求子陣列和的最大值

題目要求 輸入乙個一維整形陣列,陣列裡有正數也有負數。一維陣列首尾相接,像個一條首尾相接帶子一樣。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。程式設計思路 1 首先建立乙個一維陣列a,進行資料儲存。2 定義變數,n用於求和,m為和最大值 3 開始for迴...

求子陣列的和的最大值

一 題目 輸入乙個整型陣列,陣列裡有正數也有負數。陣列中乙個或連續的多個整數組成乙個子陣列。求所有子陣列的和的最大值。要求時間複雜度為o n 例子說明 例如輸入的陣列為,和最大的子陣列為 3,10,4,7,2 因此輸出為該子陣列的和18 二 解題思路 舉例分析陣列的規律。我們試著從頭到尾逐個累加示例...

2 14 求子陣列之和的最大值

include using namespace std int maxsum int src,int n,int spos,int epos else if start all return all int max int a,int b,int c else void toneg int src,...