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

和为0的连续最长子序列-动态规划 题目:给定一个数组,数组中元素的值只能是1或者-1,求其和为0的最长连续子序列的长度;    数组为1,-1,1,-1,1,-1,1,-1,其结果为:8    数组为1,1,-1,1,1,-1,-1,其结果为:6总体思想是先动态规划求出直至每个元素时,其之前所有元素的和,然后对于相同dp[i]值时候,则二者索引之差就是一个所求的长度,索引必须是最开头与最后出现的两个索引,这样才能保证最大的和为0的... 阅读详情

最近学习了一下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]).



PS/2鼠标接口协议 一、PS/2鼠标接口        PS/2接口用于许多现代的鼠标和键盘,由IBM最初开发和使用。物理上的PS/2接口有两种类型的连接器:5脚的DIN和6脚的MINI-DIN。        二、鼠标的接口协议原理             PS/2鼠标接口采用一种双向同步串行协议。即每在时钟线上发一个脉冲,就在数据线上发送一位数据。但是在相互传输中 ,主机是拥有总线控制权的 阅读详情

相关推荐

不止于使能:用汇川PLC功能块封装,实现伺服轴状态管理与安全逻辑

本文深入探讨了汇川PLC功能块封装在伺服轴控中的应用,详细介绍了如何通过高级封装技术实现伺服轴的状态管理与安全逻辑。文章涵盖了从基础使能到全生命周期监控的进化,多轴协同的实例化管理策略,以及安全逻辑的防御性编程技巧,为工业自动化领域的工程师提供了实用的解决方案和最佳实践。

weixin_28684825的博客 272

LeetCode——最长子序列和

找出给定数组中最长子序列的和 // 先算出每 func Max(x, y int)int{ if x<y{ return x } return y } func MaxSubSum(arr []int, n int) int { res := make([]int, n) res[0] = arr[0] maxs := arr[0] for i := 1; i < n...

李豆豆的博客 1157

TL431过压保护电路实战:5.5V阈值设计全流程(附MOSFET选型建议)

本文详细介绍了基于TL431和MOSFET构建5.5V阈值过压保护电路的完整设计流程。内容涵盖核心原理、阈值计算、驱动电路设计,并重点针对大电流应用场景,提供了MOSFET选型与散热处理的实战建议,帮助工程师打造可靠高效的电源保护方案。

weixin_28327051的博客 537

最长正序子序列问题

1 问题描述 已知长度为n的序列a[ ],求最长的正序子序列(元素可重复)及其长度,若有多种方案,只输出编号字典排序最小的方案。 输入: 输入两行,第一行输入一个整数n(n>0),表述序列长度,第二行包含n个整数(可重复),表示输入的序列a[ ]; 输出: 输出两行,第一行为最长正序子序列,第二行为子序列长度。 案例: 10 3 1 4 6 0 8 2 9 5 7 3 4 6...

little_fat_sheep 1326

【Spring源码三千问】哪些循环依赖问题Spring解决不了?

哪些循环依赖问题Spring解决不了?前言版本约定正文场景一: prototype 类型的循环依赖场景二: constructor 注入的循环依赖场景三:Proxy 类型的 Bean 的循环依赖小结 系列博文: 【老王读Spring IoC-0】Spring IoC 引入 【老王读Spring IoC-1】IoC 之控制反转引入 【老王读Spring IoC-2】IoC 之 BeanDefinition 扫描注册 【老王读Spring IoC-3】Spring bean 的创建过程 【老王读Spring I

老王的专栏 7319

13.5元低成本模拟乘法器AD633JN实测:手把手教你避开那些坑

本文以13.5元低成本模拟乘法器AD633JN为核心,通过实测搭建混沌电路的全过程,手把手教你避开电源灌流、芯片发烫、输入偏置等常见陷阱。文章详细剖析了AD633JN的比例因子、输入阻抗等关键特性,并提供了正确的电源去耦、信号耦合及稳定性布线方案,旨在帮助硬件爱好者与工程师高效利用这款高性价比芯片,节省调试时间与成本。

weixin_28432777的博客 519

最长子序列和

Maximum Subarray Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array[−2,1,−3,4,−1,2,1,−5,4], the contiguous subarray...

走走停停的专栏 1015

【数据结构】汉诺塔问题(丰富图解)

经典汉诺塔问题,丰富图解,助你理解。

℉f的博客 4105

华为机试:求长度最长的的连续子序列使他们的和等于sum

有N个正整数组成的一个序列,给定一个整数sum,求长度最长的的连续子序列使他们的和等于sum,返回该子序列的长度,如果没有满足要求的序列返回-1。

AOBO516的专栏 2538

Codesys电子凸轮Cam表实战:从可视化配置到程序化构建

本文详细介绍了Codesys电子凸轮Cam表的实战应用,从可视化配置到程序化构建的全过程。通过包装机和印刷机案例,解析Cam表的基础设置、调试技巧及动态构建方法,帮助工程师快速掌握电子凸轮技术,提升运动控制精度和效率。

weixin_29309785的博客 298

用urdf给自己的ROS小车编写模型

3.3 使用urdf编写自己的ROS小车模型 3.3.1 常见的ROS小车结构有哪些? 下面就是常见的ROS小车,相信在大家的脑海里已经有了自己小车的样子,下面我和大家一起使用urdf对ros小车建模。 这里只对urdf进行简单介绍,然后就带大家使用urdf最基础的标签,建立机器人的urdf机器人模型。关于更多细节,请参看官网:http://wiki.ros.org/urdf/Tutorials 3.3.2 什么是urdf?建模的原因? 什么是urdf? URDF(Unified Robot Descri

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1万+

[笔试题]找数组中最长和为0连续子序列

输入:int 型数组由正数、负数、0组成 输出:最长和为0的子序列 例: 输入:[3,0,-1,-2,-3,1,1,1,2,3,1,-2,-1] 输出:9 思路:原数组为A,长度为N 新建一个数组B[1...N+1],B[i]=A[i-1]+A[i-2]+A[1],B[1]=0 时间复杂度为O(n)

u013807437的博客 5771

【32】C# WinForm入门到精通 ——打开文件OpenFileDialog 【属性、方法、事件、实例、源码】

本文介绍了WinForm开发中OpenFileDialog控件的关键属性及其应用。OpenFileDialog是.NET Framework提供的文件对话框控件,主要用于选择、打开文件操作。文章详细讲解了11个核心属性:AddExtension(自动补全扩展名)、AutoUpgradeEnabled(外观升级)、CheckFileExists/CheckPathExists(文件/路径存在验证)、DefaultExt(默认扩展名)、DereferenceLinks(解析快捷方式)、FileName/File

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1534

一个数组,有正有负,不改变顺序的情况下,求和最大的最长子序列

第一常规方法,时间复杂度O(n*n)  先从第一个元素开始向后累加,  每次累加后与之前的和比较,保留最大值,  再从第二个元素开始向后累加,以此类推。 public static int maxSubSumQuadratic(int[] array) { int maxSum = 0; //最大子序列求和 int maxStar

qazwsx081的专栏 1272

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

最长子序列和问题,动态规划。

输入第1行给出正整数K(≤);第2行给出K个整数,其间以空格分隔。 输出格式: 在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。 递推公式 dp[n]=max(0,dp[n-1)+num[i]; #include<iostream> #include<stdio.h> #include<math.h> using namespa...

weixin_33840661的博客 239

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【微信小程序教程】动态改变view标签的宽度和高度

【微信小程序教程】动态改变view标签的宽度和高度

FutrueJet的博客 3万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

最大子段和与最长递增子序列(贪心与动态规划)

话不多说先上代码。。。。。  最大子段和 题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大。 输入输出格式 输入格式:   第一行是一个正整数NNN,表示了序列的长度。 第二行包含NNN个绝对值不大于100001000010000的整数AiA_iAi​,描述了这段序列。   输出格式:   一个整数,为最大的子段和是多少。子段的最小长度为111。 输入样例#...

朱发财的博客 923

erlang 求序列的和

-module(sum_test). -export([sum/1,print/0]). -import(lists,[seq/2]). sum([H|T])->sum(T)+H; sum([])->0. print()->     {ok,[Value]}=io:fread("plese input data:","~d"),     io:format("n=~w~n",[

初夏的专栏 614

区间内累加和为规定值的最长子序列

问题描述 给定一个未排序序列和一个值N,然后求解该序列中的一个连续子序列,使得这个子序列s的累加值等于N,而且s是所有子序列中最长的。要求时空复杂度都是O(N)O(N)O(N) 思路和代码 首先,需要解决的是未排序的情况, 参考资料 https://www.jianshu.com/p/028055303e3b https://blog.youkuaiyun.com/gkq_tt/article/detail...

Erick Lv的笔记 1133

关于最长子序列的计算问题

题目描述 给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T的“序列和”。 对于S的所有非空连续子序列T,求最大的序列和。 变量条件:N为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。 输入描述: 第一行为一个正整数N,第二行为N个整数,表示序列中的数。 输出描述: 输入可能包括多组数据,对于每一组输入数据, 仅输出一个数,表示...

国家熬夜运动比赛中心 634

求最大子序列的和( 动态规划dp)

 只要上一个子序列最大和为正,那么无论当前值的正负,都会与当前的相加,这样以当前值结尾的子序列最大和就会增大。(一个正数 加一个 正数2 或者负数   那么都会比这个正数2 或 负数 原来要增大(此时就是站在新加的这个数的角度看子序列的和,一定会增大),同理,一个负数加任何一个数,都会使这个数减小,因此当前一子序列最大和小于零时,我们就归零它了,相当于是不加任何数,而保留当前位置值本身) 上面...

MInNrz的Love&Share 1537

动态规划——最长连续子序列和+最大子矩阵和

问题:给一列数n个,求最大连续子序列和(即连续的子序列中和最大的序列)   本文作者 凌风 (iaccepted) 拓展:给一个n*n的矩阵,求其中和最大的子矩阵(即所有子矩阵中和最大的阵) 首先也是从最简单的着手,拿到问题,很容易想到的就是直接爆搜(求所有可能的子序列和并找出最大的即可)时间复杂度为n^2 #include #include #include #d

凌风 8942

最长子序列问题之系列一

为什么80%的码农都做不了架构师?>>> ...

weixin_34124939的博客 267

求和为整数的最长子序列的长度

import java.util.ArrayList; import java.util.Collections; import java.util.List; /* * 输入一个序列,如: 1,2,3,4,2 * 输入一个整数,如:6 * 求子序列和为整数的最大长度长度 * 上述例子和为6的子序列有1,2,3和4,2 * 最长子序列为1,2,3,长度为3 * 如果没有和等于6的序列,则返回null * */ public class Main { public static void main(.

sinat_38029613的博客 348
上一篇: 编译Linux Kernel
下一篇: shell 中的函数优先于 命令
span76
博客等级 码龄18年 117粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值