Python每日一练:最长递增的区间长度(一行代码花样解法)

news2024/11/13 9:23:07

文章目录

  • 前言
  • 一、题目
  • 二、一行超人
    • 三、分析一下思路
  • 总结


前言

很显然,Python的受众远远大于C++,其实笔者本人对Python的理解也是远强于C++的,C++纯粹是为了假装笔者是个职业选手才随便玩玩的,借着十多年前学的C的功底,强行假装的。
因职业原因,Python更适用于运维、网络、AI方向,所以用得很多。最近假装职业码农装过头了,写点Python代码都习惯性加 ; 了,更离谱的是CSDN对笔者的能力判断中,C++一个劲地涨,Python都连能力都没了…
所以以后也要用Python来解解题,经常锻炼一下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目

题目描述:
给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3。(测试用例仅做参考,我们会根据代码质量进行评分)

输入描述:
第一行输入整数n。 第二行输入n个整数。

输出描述:
输出最长递增的区间长度。

示例:
输入
6
5 2 3 8 1 9

输出
3

这题昨天才做过,也是python解的。虽然才放完假,没心情做事,但咱也不能干重复的事,不重复造轮子是吧,所以咱玩点花活,用一行代码解决它

二、一行超人

代码如下(示例):

result=max(list(reduce(lambda x, y: x + y, [[i for i in range(len(list(num)))] for item, num in groupby(list(map(lambda x: x+0,[arr[i-1]<arr[i] for i in range(1,len(arr))])))])))+2

为这一行解决,想了我大半天,到处找文章学习,看到了一篇介绍groupby的文章才有想法,又看到一篇说对 [1 ,1, 1, 0, 0, 1, 1, 0] 这种数组分组的文章。reduce以前是内置的不用引入,现在改到functools库里了,groupby是itertools标准库里的,都是内置的不用安装什么。

三、分析一下思路

[arr[i-1]<arr[i] for i in range(1,len(arr))]
这行代码是一个列表生成式,根据测试数据:
arr = [5, 2, 3, 8, 1, 9]
会生成如下列表:
[False, True, True, False, True]
lambda x: x+0
这是一个匿名函数,用于把False转成0,True转成1,map是把前面的列表传入这个函数。再用list给转成列表,因为map运行后的结果是一个对象。
用 groupby分组,用reduce统计,它需要三个参数,另一个匿名lambda x, y作为reduce的参数,这里省了第三个参数初始值,默认None,实际上可以把最后的加2作为参数写入的,但括号实在太多,老眼昏花的,数不清了。虽然reduce的结果就是list,但好像不能直接max,所以又加了一个list转换,最后的max是求出这个分组列表中的最大值,然后加2,因为计算过程中不计第一个。
下面是在命令提示中的测试:
原题示例:
在这里插入图片描述
改一下arr:arr+=[11,12,13,14]
在这里插入图片描述
再把最大连续增长放到最前面试一下:
在这里插入图片描述
证明可行!不过很遗憾的是:CSDN的python解释器不认这个一行超人代码,不报错也不给结果。
于是,我又想了一个一行解决的办法,比上面的方法更简单有效!
我以为CSDN这解释器不让引用库,就想了一个不用引入库的办法如下:

result=len(max( ''.join(list(map(lambda x: str(x+0),[arr[i-1]<arr[i] for i in range(1,len(arr))]))).split('0') ))+1

这个代码要简洁一点哈~ 咱生成0和1字符串,再把它以0切割了,这样就成了:
[‘11’, ‘1’] 如此这样的数据,我再max一下,len一下并加1,搞定!

完整代码如下:

    def solution(self, n, arr):
    	# 不正经方法1,CSDN网页版不可行
        result = max(list(reduce(lambda x, y: x + y, [[i for i in range(len(list(num)))] for item, num in groupby(list(map(lambda x: x+0,[arr[i-1]<arr[i] for i in range(1,len(arr))])))])))+2
        # 不正经方法2,CSDN网页版可行,100分
		result=len(max( ''.join(list(map(lambda x: str(x+0),[arr[i-1]<arr[i] for i in range(1,len(arr))]))).split('0') ))+1

        # TODO: 请在此编写代码,以下是正经代码,可过100分
        result,tmp = 11
        for i in range(n):
            if i+1 < n and arr[i+1] > arr[i]:
                tmp += 1
            else:
                result = tmp if tmp > result else result
                tmp = 1

总结

玩这花活,其实对理解lambda,列表生成式,map很有用的。并且编程这个事嘛,想法最重要!为什么要学算法?算法也是解决问题的想法。工作中会遇到很多奇奇怪怪的事,特别对我们运维、系统集成工作。那是八仙过海,啥办法都能上。这是一个很好的学习的过程。而且不是很好玩吗?
希望本文对各位看官理解python有点小用!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/489015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

链表(数据结构)

目录 链表 链表的分类 1、单向或者双向 2、带头或者不带头 3、循环或者非循环 总结&#xff1a; 单链表 创建链式结构 创建新节点 尾插 尾删 头插 头删 查找节点 在pos位置后插入 删除pos位置后的节点 销毁 链表 概念&#xff1a; 链表是一种物理结构上非连续的、非顺序的存储结…

c# 数据保存为PDF(二) (Aspose pdf篇)

文章目录 前言关于Aspose PDF使用Aspose.Pdf常用的命名空间和类库1 创建简单的PDF文档2 美化PDF样式2.1 创建测试数据2.2 项目头部样式2.3 全部代码 小结附录参考 前言 项目中需要将数据导出存为PDF格式&#xff0c;试了一下Aspose组件&#xff0c;仅以此记录一下使用感受。 …

设计模式——原型模式(浅拷贝和深拷贝)

是什么&#xff1f; 用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象&#xff1b; 结构 抽象原型类&#xff1a;规定了具体原型对象必须实现的Clone&#xff08;&#xff09;方法&#xff1b; 具体原型类&#xff1a;实现抽象…

Elasticsearch:NLP 和 Elastic:入门

自然语言处理 (Natural Language Processing - NLP) 是人工智能 (AI) 的一个分支&#xff0c;专注于尽可能接近人类解释的理解人类语言&#xff0c;将计算语言学与统计、机器学习和深度学习模型相结合。 AI - Artificial Inteligence 人工智能ML - Machine Learning 机器学习DL…

集线器、网桥、交换机

一.集线器 集线器&#xff08;HUB&#xff09;&#xff0c;它是工作在物理层的设备&#xff0c; 由于它只是工作在物理层的设备&#xff0c;所以它并不关心也不可能关心OSI上面几层所涉及的&#xff0c;它的工作机制流程是&#xff1a;从一个端口接收到数据包时&#xff0c;会在…

STL基础

目录 一、STL的诞生 二、STL基本概念 三、STL六大组件 大体分为六大组件&#xff1a;容器、算法、迭代器、仿函数、适配器&#xff08;配接器&#xff09;、空间配置器 四、容器、算法与迭代器的认识 容器container&#xff1a;存放数据地方 算法algorithm&#xff1a;解…

中级软件设计师备考---软件工程2

目录 软件测试分类和要求测试用例设计测试阶段McCabe复杂度软件维护软件过程改进---CMMICMM英文版CMM中文版CMMI 软件测试分类和要求 分类&#xff1a; 灰盒测试&#xff1a;多用于集成测试阶段&#xff0c;不仅关注输出、输入的正确性&#xff0c;同时也关注程序内部的情况。…

MySQL:插入,更新与删除、索引

一、学习目标 掌握如何向表中插入数据掌握更新数据的方法熟悉如何删除数据掌握对数据表基本操作的方法和技巧了解什么是索引掌握创建索引的方法和技巧熟悉如何删除索引熟悉掌握索引的常见问题 二、实验内容 创建表books&#xff0c;对数据表进行插入、更新和删除操作&#x…

SkyWalking集成Logback的使用

SkyWalking集成Logback的使用 将微服务的日志框架去集成SkyWalking&#xff0c;我们希望在我们微服务中日志中&#xff0c;能够记录当前调用链路的id&#xff0c;然后我们再根据这个id去SkyWalking的前端界面中进行搜索找到对应的调用链路记录。 因为springboot默认实现的日志…

Ansible 的脚本 之playbook 剧本

目录 第一章.playbooks的组成 1.1playbooks的组成部分 1.2运行playbook 1.3定义、引用变量 1.4.指定远程主机sudo切换用户 1.6.when条件判断 1.7.迭代 第二章.Templates模块 2.1.准备模板 2.2.修改主机清单文件 2.3.编写 playbook 第三章.tags 模块 3.1.yaml文件编…

操作系统原理 —— 线程的概念、实现方式、多线程模型(十)

什么是线程&#xff0c;为什么要引入线程&#xff1f; 有的进程可能需要 “同时” 做很多事情&#xff0c;而传统的进程只能串行的执行一系列的程序&#xff0c;为此&#xff0c;引入了 “线程” &#xff0c;来增加并发度。 可以把线程理解为 轻量级进程&#xff0c;线程是可…

剧本杀闯关小程序app软件

剧本杀闯关小程序软件是一种结合了角色扮演和解谜游戏元素的互动娱乐产品&#xff0c;目前在市场上越来越受欢迎。以下是剧本杀闯关小程序软件市场行业情况的一些特点&#xff1a; 市场需求增长&#xff1a;随着人们对于线上互动娱乐的需求增加&#xff0c;剧本杀闯关小程序…

maven install的时候报Unable to find main class

目录 问题描述解决办法解决方案一&#xff1a;添加一个主函数解决方案二&#xff1a;将不是web工程的设置跳过解决方案三&#xff1a;打包插件的作用本质上就是将当前项目所依赖的jar打包到一块&#xff0c;这样jar包就可以运行了&#xff0c;我们完全可以把parent的pom.xml的b…

智慧农业物联网平台建设方案

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 智慧农业物联网系统组网图 2.2.1 智能温室组网说明 该组网图演示的为小面积示范区&#xff0c;每个连栋温室为 1个灌溉区域&#xff0c;1个子系统&#xff0c;该子系统完成…

学习Typescript(第一弹)

Typescript的基础类型 Boolean类型 let bool: boolean true;Number类型 let num: number 222;String类型 let str: string 码上coding;数组Array类型 对数组类型的定义有两种方式: let arr1: number[] [1,2,3]; let arr2: Array<number | string> [1,2,码上co…

Android APK 反编译后重新打包并签名

APKTool&#xff1a; Apktool 是一个逆向android非常有用的工具&#xff0c;可以用来反编译apk文件&#xff0c;并且能在修改部分资源文件后&#xff0c;重新打包成一个新的apk。 下载连接&#xff1a;http://ibotpeaches.github.io/Apktool/install/ 下载之后文件夹非常清爽&…

电力节能设备远程监控系统解决方案

电力节能设备远程监控系统解决方案 一、项目背景 随着城市化进程的发展&#xff0c;对电力设备安全、可靠、经济运行的要求越来越高&#xff0c;由于没有统一专业的用电现代化管理规划&#xff0c;电力设备管理混乱、数据采集不方便、运行智能化程度低&#xff0c;需要实时掌…

复合查询--- MySQL总结(三)

复合查询 文章目录 复合查询多表查询自连接子查询单行查询多行查询多列子查询合并查询 多表查询 前面讲述的关于进行一个表的简单查询和关于时间函数的相关问题&#xff0c;下面要进行复合查询的相关内容。 这里要使用卡笛尔集的概率让两个表融合成为一个表。 需要使用相应的字…

vue项目为例解决element ui 时间选择器 picker使用样式穿透不起作用问题

今天在开发中 需要修改时间选择器弹出的这个组件的样式 但这个东西比较坑爹 首先 不能影响其他组件 就是其他组件用了时间选择器 不能受到我们写的样式的影响 那么 就只好穿透了 但你会发现 这东西是作用与body下的 就很坑 穿透我试了挺久的 不起作用 但官方文档有提供给我们一…

centos7 配置 sftp 服务器并通过 java 上传文件

虚拟机配置 1、创建sftp用户组 groupadd sftp2、添加用户 useradd -g sftp mysftp3、设置用户密码 passwd mysftp4、创建文件根目录 mkdir /app/data5、将该目录设置到用户上 usermod -d /app/data mysftp6、修改配置文件 vim /etc/ssh/sshd_config7、找到 Subsystem &am…