• erlang 小程序:整数序列,搜索和为正的最长子序列


    近期学习了一下erlang, 编了个小程序


    算法例如以下:

    把參数分为三个

    当前位置的前子序列(Save)(比方 -5, 1,2,-1, _, ... ) 当前位置为_时, 前子序列就是 1,2,-1

    以及此子序列的和(CurSum) ( 1,2,-1的 CurSum 是 2) 

    剩余的数 Rest;  剩余的数也能够表示为 [H|T] ,H是第一元素,T为剩余的元素是列表


    处理步骤例如以下:

      假设 Rest 为空,说明处理完成。打印 CurSum和Save

      假设,还剩一个元素(Rest仅仅有一个元素)

           假设此元素与CurSum的和依旧是正。应该包含此元素

           反之不包含它

      Rest有多个元素

           假设此元素与CurSum的和依旧是正,应该包含此元素(存入Save, CurSum 更新为CurSum+H), 继续递归

           否则,由于增加此元素CurSum为负,对后面的序列没有贡献。应该又一次计算,在此之前,打印Save。做个了断



    -module(tut1).
    -export([maxlen_pos_sublist/3]).
    
    maxlen_pos_sublist(Save, CurSum, Rest) when Rest == [] ->  io:format("~p~n",[{sum, CurSum}, {list,Save}]);
    maxlen_pos_sublist(Save, CurSum, [H|T]) -> 
        case T == [] of
            false ->
                case CurSum+H > 0 of 
                    true-> maxlen_pos_sublist(Save++[H],CurSum+H,T);
                    false-> io:format("~p~n",[{sum, CurSum}, {list,Save}]), maxlen_pos_sublist([],0,T)
                end;
            true -> 
                case CurSum+H > 0 of 
                    true-> maxlen_pos_sublist(Save++[H],CurSum+H,[]);
                    false-> maxlen_pos_sublist(Save,CurSum,[])
                end
        end.
    
    % c(tut1).
    % tut1:maxlen_pos_sublist([],0,[1]).            
    % tut1:maxlen_pos_sublist([],0,[1,2]).            
    % tut1:maxlen_pos_sublist([],0,[1,3,-6,2,5]).



  • 相关阅读:
    [网络流24题]方格取数
    [网络流24题]太空飞行计划
    网络流24题题解合集【不定期更新】【附常见套路分析】
    【优先队列】POJ3614-Sunscreen
    【优先队列】POJ1442-Black Box
    【Huffman树贪心+优先队列】POJ3253-Fence Repair
    【优先队列+贪心】POJ2431-Expedition
    【专题笔记】优先队列和堆
    【动态规划】POJ1664-放苹果
    【动态规划+二分查找】POJ2533&POJ1631最长上升子序列(LIS)
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6801752.html
Copyright © 2020-2023  润新知