【力扣hot100】刷题笔记Day7

前言

  • 身边同学已经陆陆续续回来啦,舍友都开始投简历了,我也要加油啦!刷完hot100就投!

73. 矩阵置零 - 力扣(LeetCode)

  • 标记数组:空间复杂度O(m+n)

    • class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:m, n = len(matrix), len(matrix[0])row, col = [False] * m, [False] * n  # 标记数组# 遍历一次,标记对应的行列为0for i in range(m):for j in range(n):if matrix[i][j] == 0:row[i] = col[j] = True# 遍历二次,根据标记修改对应行列for i in range(m):for j in range(n):if row[i] or col[j]:matrix[i][j] = 0
  • 两个标记变量:空间复杂度O(1)

    • 思路参考题解,遇到0就向首行首列汇报,最后再把首行首列置0
    • class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:m, n = len(matrix), len(matrix[0])# 如果可迭代对象中有任何一个元素为 True,则 any 函数返回 True;否则返回 Falseflag_col0 = any(matrix[i][0] == 0 for i in range(m))  # 判断首行是否有0flag_row0 = any(matrix[0][j] == 0 for j in range(n))  # 判读首列是否有0# 迭代非首行非首列,遇到0就把置0指令放在首行首列for i in range(1, m):for j in range(1, n):if matrix[i][j] == 0:matrix[i][0] = matrix[0][j] = 0# 迭代非首行非首列,根据指令置0for i in range(1, m):for j in range(1, n):if matrix[i][0] == 0 or matrix[0][j] == 0:matrix[i][j] = 0# 首行有0,则全置0if flag_col0:for i in range(m):matrix[i][0] = 0# 首列有0,则全置0if flag_row0:for j in range(n):matrix[0][j] = 0
  • 一个标记变量:空间复杂度O(1)

    • 参考题解,保存首行,但是要全部倒序遍历,防止提前更新,太难想仅作参考
    • class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:m = len(matrix)n = len(matrix[0])first_row = False   # 标记首行是否有0元素for i, row in enumerate(matrix):for j, item in enumerate(row):if i == 0 and item == 0:first_row = True    # 首行出现0元素,用标志位标记elif item == 0:matrix[i][0] = 0    # 非首行出现0元素,将对应的列首置为0,说明该列要置为0matrix[0][j] = 0    # 将对应的行首置为0,说明该行要置为0for i in range(m - 1, -1, -1):for j in range(n - 1, -1, -1):# 从最后一个元素反向遍历,避免行首和列首的信息被篡改if i == 0 and first_row:matrix[i][j] = 0    # 首行元素是否置为0看标志位elif i != 0 and (matrix[i][0] == 0 or matrix[0][j] == 0):matrix[i][j] = 0    # 非首行元素是否置为0看行首和列首是否为0

54. 螺旋矩阵 - 力扣(LeetCode)

  • 边界模拟

    • 类似之前C++版本,设置边界,依次循环模拟输出,边界溢出则跳出循环
    • class Solution:def spiralOrder(self, matrix: List[List[int]]) -> List[int]:res = []l, r, u, d = 0, len(matrix[0])-1, 0, len(matrix)-1while True:# 向右for i in range(l, r+1): res.append(matrix[u][i])u += 1if u > d: break# 向下for i in range(u, d+1): res.append(matrix[i][r])r -= 1if r < l: break# 向左for i in range(r, l-1, -1): res.append(matrix[d][i])d -= 1if d < u: break# 向上for i in range(d, u-1, -1): res.append(matrix[i][l])l += 1if l > r: breakreturn res

 48. 旋转图像 - 力扣(LeetCode)

  • 辅助数组

    • class Solution:def rotate(self, matrix: List[List[int]]) -> None:n = len(matrix)matrix_new = [[0] * n for _ in range(n)]  # 新的n*n的矩阵for i in range(n):for j in range(n):# matrix[row][col]旋转到matrix_new[col][n−row−1]matrix_new[j][n-i-1] = matrix[i][j]# 不能写成 matrix = matrix_newmatrix[:] = matrix_new
  •  原地旋转

    • class Solution:def rotate(self, matrix: List[List[int]]) -> None:n = len(matrix)for i in range(n // 2):  # 偶数n/2,奇数(n-1)/2for j in range((n + 1) // 2):  # 偶数n/2,奇数(n+1)/2matrix[i][j], matrix[n-j-1][i], matrix[n-i-1][n-j-1], matrix[j][n-i-1] \= matrix[n-j-1][i], matrix[n-i-1][n-j-1], matrix[j][n-i-1], matrix[i][j]
  •  两次翻转

    • class Solution:def rotate(self, matrix: List[List[int]]) -> None:n = len(matrix)# 上下翻转:只遍历上半部for i in range(n // 2):for j in range(n):matrix[i][j], matrix[n-i-1][j] = matrix[n-i-1][j], matrix[i][j]# 对角翻转:只遍历下三角for i in range(n):for j in range(i):matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]

 240. 搜索二维矩阵 II - 力扣(LeetCode)

  • 直接搜索:N(mn)

    • 就不用传统的遍历写法了,这里记录两种仅用一行就可以实现的搜索算法
    • class Solution:def searchMatrix(self, M: List[List[int]], target: int) -> bool:# chain()函数于将多个可迭代对象连接成一个单独的迭代器# 这里用于连接多个被*M解包得到的多个一维列表   return target in chain(*M)# 直接利用sum函数转化为一个一维列表return target in sum(M,[])
  • 二分查找:N(log(mn))

    • class Solution:def searchMatrix(self, M: List[List[int]], target: int) -> bool:def bin_search(arr,target):l,r = 0,len(arr)-1while l <= r:mid = (l+r) // 2if arr[mid] == target:return Trueelif arr[mid] < target:l = mid + 1else:r = mid - 1return Falsem = len(M)# 逐行进行二分查找for i in range(m):if bin_search(M[i], target):return Truereturn False
  • 贪心BST

    • 也叫折线搜索,来源于题解,图画的很清晰,从右上角出发进行搜索
    • class Solution:def searchMatrix(self, M: List[List[int]], target: int) -> bool:i, j = len(M) - 1, 0# 右上角出发进行搜索while i >= 0 and j <= len(M[0]) - 1:if target > M[i][j]:j += 1  # 往下移,排除一行elif target < M[i][j]:i -= 1  # 往左移,排除一列else:return Truereturn False

 后言

  • 一题多解的还是尽量每个解都弄懂,前期基础打好点,后面能快速写出最简单的就好啦

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

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

相关文章

【日常聊聊】计算机专业必看的电影

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 方向一&#xff1a;电影推荐 方向二&#xff1a;技术与主题 方向三&#xff1a;职业与人生 结语 我的其他博客 前言 计算机…

Linux环境安装Git(详细图文)

说明 此文档Linux环境为&#xff1a;Ubuntu 22.04&#xff0c;本文档介绍两种安装方式&#xff0c;一种是服务器能联网的情况通过yum或apt命令下载&#xff0c;第二种采用源码方式安装。 一、yum/apt方式安装 1.yum方式安装Git 如果你的服务器环境是centos/redhot&#xff…

最新Unity游戏主程进阶学习大纲(2个月)

过完年了&#xff0c;很多同学开始重新规划自己的职业方向,找更好的机会,准备升职或加薪。今天给那些工作了1~5年的开发者梳理”游戏开发客户端主程”的学习大纲&#xff0c;帮助大家做好面试准备。适合Unity客户端开发者。进阶主程其实就是从固定的几个方面搭建好完整的知识体…

HarmonyOS—@Observed装饰器和@ObjectLink嵌套类对象属性变化

Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化 概述 ObjectLink和Observed类装饰器用于在涉及嵌套对象或数组的场景中进行双向数据同步&#xff1a; 被Observed装饰的类&#xff0c;可以被观察到属性的变化&#xff1b;子组件中ObjectLink装饰器装饰的状…

医卫医学生理学试题及答案,分享几个实用搜题和学习工具 #经验分享#知识分享

下面&#xff0c;我将为您介绍几款备受大学生欢迎的搜题软件&#xff0c;希望能够帮助您更好地完成学业和提升学习效果。 1.历史地图 历史地图app是一款学习型地图软件&#xff0c;历史地图app比较适用于对历史进行学习和偏爱历史的朋友使用 &#xff0c;历史地图app支持多平…

Android Studio Hedgehog 代码补全失效问题记录

Android Studio Hedgehog 代码补全失效问题记录 代码失效问题网上答案很多&#xff0c;如&#xff1a; 关闭省电模式&#xff1b;清空缓存&#xff1b;重启电脑&#xff1b;删除重新安装啥的。但是很一行都没有用&#xff0c;并且我电脑上的4.3.3版本的Android Studio是没有该…

Rabbitmq入门与应用(六)-rabbitmq的消息确认机制

rabbitmq的消息确认机制 确认消息是否发送给交换机 配置 server:port: 11111 spring:rabbitmq:port: 5672host: 192.168.201.81username: adminpassword: 123publisher-confirm-type: correlated编码RabbitTemplate.ConfirmCallback ConfirmCallback 是一个回调接口&#xf…

Python学习笔记——自定义函数(基础知识)

自定义函数非常简洁有效地实现了代码的复用&#xff0c;让程序编写、阅读、测试和修改变得更加容易。 下面记录Python自定义函数的使用。 1、定义函数&#xff1a; def describe_pet(pet_name,animal_typedog):显示宠物的信息print(f"\nI have a {animal_type}.")…

仿12306校招项目-前后端运行

目录 1.git 克隆 2.设置JDK版本 3.sql脚本导入数据 4.启动中间件 5.运行后端 6.运行前端 1.git 克隆 打开 IntelliJ IDEA&#xff0c;菜单栏顶部找到 Git -> Clone 选项。找到 Clone 这个按钮输入 gitgitee.com:nageoffer/12306.git或者https://gitee.com/nageoffer/…

C# CAD交互界面-模态窗体与非模态窗体调用方式

运行环境Visual Studio 2022 c# cad2016 一、模态窗体调用方式&#xff1a; 当一个模态窗体打开时&#xff0c;它会阻塞主窗体的所有输入&#xff0c;直到关闭该模态窗体为止。例如&#xff0c;弹出一个对话框让用户必须完成某些操作后才能继续使用主程序。 [CommandMethod(&q…

C++正则表达式笔记

最近翻了翻正则表达式的一些资料&#xff0c;做个记录。 1、微软官方 <regex> 函数 | Microsoft Learn 2、正则表达式语法简介 正则表达式语法简介 - 简书 3、正则表达式基础语法大全 正则表达式基础语法大全_正则表达式语法大全-CSDN博客 4、练习 &#xff08;1…

HarmonyOS - 实现多设备协同开发实战教程~

前言 现在随着个人设备越来越多&#xff0c;越来越需要多个设备之间相互感知和连接&#xff0c;设备和设备之间可以相互联动&#xff0c;形成互联互通的场景&#xff0c;而搭载HarmonyOS的设备恰好可以满足这一点 。下面通过开发一个HarmonyOS的多端分布式表白应用来实现设备之…

python coding with ChatGPT 打卡第21天| 二叉树:最近公共祖先

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

hope实验室预备役第4次测试题解

目录 1.Foreign Exchange 2.Takahashi Gets Lost 3.Sasha and the Beautiful Array 4.Sasha and the Drawing 5.Sasha and the Casino 6.Only one of two 7.村村通 8.传送门 1.Foreign Exchange 原题链接 Sample 1 InputcopyOutputcopy 4 5 7 0 3 2 2 4 3 5 25 Sample…

【AI绘画】Stable Diffusion简介_stable diffusion变现

手把手教你入门绘图超强的AI绘画&#xff0c;用户只需要输入一段图片的文字描述&#xff0c;即可生成精美的绘画。给大家带来了全新保姆级教程资料包 &#xff08;文末可获取&#xff09; Stable Diffusion是2022年发布的深度学习文本到图像生成模型&#xff0c;它主要用于根据…

ncnn之三(补充):window环境下vs2022安装ncnn+protobuf

启动VS2022 下面的 x64 Native Tools Command Prompt for VS2022 protobuf git clone gitgithub.com:protocolbuffers/protobuf.git# 或者 下载 https://github.com/google/protobuf/archive/v3.11.2.zip cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPERelease -D…

HTML的特殊字符

HTML的特殊字符 有些特殊的字符在 html 文件中是不能直接表示的&#xff0c;例如: 空格&#xff0c;小于号(<)&#xff0c;大于号(>)&#xff0c;按位与(&)。 空格 示例代码&#xff1a; 运行结果&#xff1a; 由于html 标签就是用 < > 表示的&#xff0…

【快速搞定Webpack5】修改输出文件目录及自动清理上次打包文件(五)

介绍 默认情况下webpack打包后&#xff0c;我们的图片和js等文件都会被打包到dist目录下&#xff0c;文件多了混淆在一起一方面不利于文件的查找和管理&#xff0c;另外一方面看上去也不美观。 所以今天我们学习的内容就是控制输出后的文件进入不同的目录。 一、配置 新增4…

BioTech - 大型蛋白质复合物的组装流程 (CombFold)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/136187314 CombFold是用于预测大型蛋白质复合物结构的组合和分层组装算法&#xff0c;利用AlphaFold2预测的亚基之间的成对相互作用。CombFold的组…

MES系统的功能有哪些?

阅读本文&#xff0c;你将了解&#xff1a;一、MES系统是什么&#xff1b;二、MES系统的功能&#xff1b;三、MES系统的使用场景与案例分析&#xff1b;四、如何更高效地利用MES系统。 这是我们公司正在使用的MES系统&#xff0c;已为大家搭建好模板了&#xff0c;无需下载&…