热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python每日一练(20230327)

目录1. 最大矩形  🌟🌟🌟2. 反转链表 II  🌟🌟3. 单词接龙 II  🌟🌟&#

目录

1. 最大矩形  🌟🌟🌟

2. 反转链表 II  🌟🌟

3. 单词接龙 II  🌟🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏



1. 最大矩形

给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

示例 1:

输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:6
解释:最大矩形如上图所示。

示例 2:

输入:matrix = []
输出:0

示例 3:

输入:matrix = [["0"]]
输出:0

示例 4:

输入:matrix = [["1"]]
输出:1

示例 5:

输入:matrix = [["0","0"]]
输出:0

提示:

  • rows == matrix.length
  • cols == matrix[0].length
  • 0 <&#61; row, cols <&#61; 200
  • matrix[i][j] 为 &#39;0&#39; 或 &#39;1&#39;

出处&#xff1a;

https://edu.csdn.net/practice/23885007

代码&#xff1a;

from typing import Listclass Solution(object):def maximalRectangle(self, matrix):""":type matrix: List[List[str]]:rtype: int"""if matrix is None or len(matrix) &#61;&#61; 0:return 0ls_row, ls_col &#61; len(matrix), len(matrix[0])left, right, height &#61; [0] * ls_col, [ls_col] * ls_col, [0] * ls_colmaxA &#61; 0for i in range(ls_row):curr_left, curr_right &#61; 0, ls_colfor j in range(ls_col):if matrix[i][j] &#61;&#61; &#39;1&#39;:height[j] &#43;&#61; 1else:height[j] &#61; 0for j in range(ls_col):if matrix[i][j] &#61;&#61; &#39;1&#39;:left[j] &#61; max(left[j], curr_left)else:left[j], curr_left &#61; 0, j &#43; 1for j in range(ls_col - 1, -1, -1):if matrix[i][j] &#61;&#61; &#39;1&#39;:right[j] &#61; min(right[j], curr_right)else:right[j], curr_right &#61; ls_col, jfor j in range(ls_col):maxA &#61; max(maxA, (right[j] - left[j]) * height[j])return maxA# %%
s &#61; Solution()
matrix &#61; [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
print(s.maximalRectangle(matrix))
matrix &#61; []
print(s.maximalRectangle(matrix))
matrix &#61; [["0"]]
print(s.maximalRectangle(matrix))
matrix &#61; [["1"]]
print(s.maximalRectangle(matrix))
matrix &#61; [["0","0"]]
print(s.maximalRectangle(matrix))

输出&#xff1a;

6
0
0
1
0



2. 反转链表 II

给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left <&#61; right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。

示例 1&#xff1a;

输入&#xff1a;head &#61; [1,2,3,4,5], left &#61; 2, right &#61; 4
输出&#xff1a;[1,4,3,2,5]

示例 2&#xff1a;

输入&#xff1a;head &#61; [5], left &#61; 1, right &#61; 1
输出&#xff1a;[5]

提示&#xff1a;

  • 链表中节点数目为 n
  • 1 <&#61; n <&#61; 500
  • -500 <&#61; Node.val <&#61; 500
  • 1 <&#61; left <&#61; right <&#61; n

进阶&#xff1a; 你可以使用一趟扫描完成反转吗&#xff1f;

出处&#xff1a;

https://edu.csdn.net/practice/23885008

代码&#xff1a;

class ListNode(object):def __init__(self, x):self.val &#61; xself.next &#61; Noneclass LinkList:def __init__(self):self.head&#61;Nonedef initList(self, data):self.head &#61; ListNode(data[0])r&#61;self.headp &#61; self.headfor i in data[1:]:node &#61; ListNode(i)p.next &#61; nodep &#61; p.nextreturn rdef convert_list(self,head):ret &#61; []if head &#61;&#61; None:returnnode &#61; headwhile node !&#61; None:ret.append(node.val)node &#61; node.nextreturn retclass Solution(object):def reverseBetween(self, head, m, n):""":type head: ListNode:type m: int:type n: int:rtype: ListNode"""if m &#61;&#61; n:return headsplit_node, prev, curr &#61; None, None, headcount &#61; 1while count <&#61; m and curr is not None:if count &#61;&#61; m:split_node &#61; prevprev &#61; currcurr &#61; curr.nextcount &#43;&#61; 1tail, next_node &#61; prev, Nonewhile curr is not None and count <&#61; n:next_temp &#61; curr.nextcurr.next &#61; prevprev &#61; currcurr &#61; next_tempcount &#43;&#61; 1if split_node is not None:split_node.next &#61; previf tail is not None:tail.next &#61; currif m &#61;&#61; 1:return prevreturn head# %%
l &#61; LinkList()
list1 &#61; [1,2,3,4,5]
l1 &#61; l.initList(list1)
left &#61; 2
right &#61; 4
s &#61; Solution()
print(l.convert_list(s.reverseBetween(l1, left, right)))

输出&#xff1a;

[1, 4, 3, 2, 5]



3. 单词接龙 II

按字典 wordList 完成从单词 beginWord 到单词 endWord 转化&#xff0c;一个表示此过程的 转换序列 是形式上像 beginWord -> s1 -> s2 -> ... -> sk 这样的单词序列&#xff0c;并满足&#xff1a;

  • 每对相邻的单词之间仅有单个字母不同。
  • 转换过程中的每个单词 si&#xff08;1 <&#61; i <&#61; k&#xff09;必须是字典 wordList 中的单词。注意&#xff0c;beginWord 不必是字典 wordList 中的单词。
  • sk &#61;&#61; endWord

给你两个单词 beginWord 和 endWord &#xff0c;以及一个字典 wordList 。请你找出并返回所有从 beginWord 到 endWord 的 最短转换序列 &#xff0c;如果不存在这样的转换序列&#xff0c;返回一个空列表。每个序列都应该以单词列表 [beginWord, s1, s2, ..., sk] 的形式返回。

示例 1&#xff1a;

输入&#xff1a;beginWord &#61; "hit", endWord &#61; "cog"
wordList &#61; ["hot","dot","dog","lot","log","cog"]
输出&#xff1a;[["hit","hot","dot","dog","cog"],["hit","hot","lot","log","cog"]]
解释&#xff1a;存在 2 种最短的转换序列&#xff1a;
"hit" -> "hot" -> "dot" -> "dog" -> "cog"
"hit" -> "hot" -> "lot" -> "log" -> "cog"

示例 2&#xff1a;

输入&#xff1a;beginWord &#61; "hit", endWord &#61; "cog"
wordList &#61; ["hot","dot","dog","lot","log"]
输出&#xff1a;[]
解释&#xff1a;endWord "cog" 不在字典 wordList 中&#xff0c;所以不存在符合要求的转换序列。

提示&#xff1a;

  • 1 <&#61; beginWord.length <&#61; 7
  • endWord.length &#61;&#61; beginWord.length
  • 1 <&#61; wordList.length <&#61; 5000
  • wordList[i].length &#61;&#61; beginWord.length
  • beginWordendWord 和 wordList[i] 由小写英文字母组成
  • beginWord !&#61; endWord
  • wordList 中的所有单词 互不相同

出处&#xff1a;

https://edu.csdn.net/practice/23885009

代码&#xff1a;

from typing import Listclass Solution:def findLadders(self, beginWord: str, endWord: str, wordList: List[str]) -> List[List[str]]:import collectionsans &#61; []steps &#61; float("inf")if not beginWord or not endWord or not wordList or endWord not in wordList:return []word_dict &#61; collections.defaultdict(list)L &#61; len(beginWord)for word in wordList:for i in range(L):word_dict[word[:i] &#43; "*" &#43; word[i&#43;1:]].append(word)queue &#61; [[beginWord]]cost &#61; {beginWord : 0}while queue:words_list&#61; queue.pop(0)cur_word &#61; words_list[-1]if cur_word &#61;&#61; endWord:ans.append(words_list[:])else:for i in range(L):intermediate_word &#61; cur_word[:i] &#43; "*" &#43; cur_word[i&#43;1:]for word in word_dict[intermediate_word]:w_l_temp &#61; words_list[:]if word not in cost or cost[word] >&#61; cost[cur_word] &#43; 1:cost[word] &#61; cost[cur_word] &#43; 1w_l_temp.append(word)queue.append(w_l_temp[:])return ans# %%
s &#61; Solution()
beginWord &#61; "hit"
endWord &#61; "cog"
wordList &#61; ["hot","dot","dog","lot","log","cog"]
print(s.findLadders(beginWord, endWord, wordList))

输出&#xff1a;

[[&#39;hit&#39;, &#39;hot&#39;, &#39;dot&#39;, &#39;dog&#39;, &#39;cog&#39;], [&#39;hit&#39;, &#39;hot&#39;, &#39;lot&#39;, &#39;log&#39;, &#39;cog&#39;]]



&#x1f31f; 每日一练刷题专栏 &#x1f31f;

持续&#xff0c;努力奋斗做强刷题搬运工&#xff01;

&#x1f44d; 点赞&#xff0c;你的认可是我坚持的动力&#xff01; 

&#x1f31f; 收藏&#xff0c;你的青睐是我努力的方向&#xff01; 

评论&#xff0c;你的意见是我进步的财富&#xff01;  

 主页&#xff1a;https://hannyang.blog.csdn.net/

Golang每日一练 专栏

Python每日一练 专栏

C/C&#43;&#43;每日一练 专栏

Java每日一练 专栏


推荐阅读
  • 在Java项目中,当两个文件进行互相调用时出现了函数错误。具体问题出现在 `MainFrame.java` 文件中,该文件位于 `cn.javass.bookmgr` 包下,并且导入了 `java.awt.BorderLayout` 和 `java.awt.Event` 等相关类。为了确保项目的正常运行,请求提供专业的解决方案,以解决函数调用中的错误。建议从类路径、依赖关系和方法签名等方面入手,进行全面排查和调试。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • Python内置模块详解:正则表达式re模块的应用与解析
    正则表达式是一种强大的文本处理工具,通过特定的字符序列来定义搜索模式。本文详细介绍了Python内置的`re`模块,探讨了其在字符串匹配、验证和提取中的应用。例如,可以通过正则表达式验证电子邮件地址、电话号码、QQ号、密码、URL和IP地址等。此外,文章还深入解析了`re`模块的各种函数和方法,提供了丰富的示例代码,帮助读者更好地理解和使用这一工具。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 【问题描述】给定一个单向链表,要求使用Java编程语言实现从链表尾部到头部的逆序打印功能。该功能通过利用栈的数据结构来实现,最终将结果存储在一个ArrayList中返回。具体实现步骤如下:1. 遍历链表,将每个节点的值依次压入栈中。2. 从栈中逐个弹出元素,并将其添加到ArrayList中。3. 返回包含逆序链表元素的ArrayList。这种方法充分利用了栈的后进先出特性,确保链表元素能够按照从尾到头的顺序被正确处理。 ... [详细]
  • 本报告对2018年湘潭大学程序设计竞赛在牛客网上的时间数据进行了详细分析。通过统计参赛者在各个时间段的活跃情况,揭示了比赛期间的编程频率和时间分布特点。此外,报告还探讨了选手在准备过程中面临的挑战,如保持编程手感、学习逆向工程和PWN技术,以及熟悉Linux环境等。这些发现为未来的竞赛组织和培训提供了 valuable 的参考。 ... [详细]
  • 在本阶段的Java编程实战中,我们将深入探讨位运算的应用。具体任务是实现逻辑位运算。用户需从键盘输入一个位运算符(如AND、OR、XOR或NOT)及相应的操作数,系统将根据输入的运算符执行相应的位运算并输出结果。此练习旨在加强学员对位运算的理解和实际操作能力。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
author-avatar
mobiledu2502906817
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有