代码随想录训练营第30天 | 332.重新安排行程、51. N皇后、37. 解数独

332.重新安排行程 

题目链接:重新安排行程

解法:

这个题,卡哥的思路会超时。辛辛苦苦看懂了卡哥的思路,结果超时了,直接崩溃。

看了leetcode官方的思路,非常简洁,但是里面的深意还是不太懂。

  1. 由于题目中说必然存在一条有效路径(至少是半欧拉图),所以算法不需要回溯(既加入到结果集里的元素不需要删除)
  2. 整个图最多存在一个死胡同(出度和入度相差1),且这个死胡同一定是最后一个访问到的,否则无法完成一笔画。
  3. DFS的调用其实是一个拆边的过程(既每次递归调用删除一条边,所有子递归都返回后,再将当前节点加入结果集保证了结果集的逆序输出),一定是递归到这个死胡同(没有子递归可以调用)后递归函数开始返回。所以死胡同是第一个加入结果集的元素。
  4. 最后逆序的输出即可。

边界条件:

时间复杂度:O(mlogm),其中 m 是边的数量。对于每一条边我们需要 O(log⁡m) 地删除它,最终的答案序列长度为 m+1,而与 n 无关。

空间复杂度:O(m),其中 m 是边的数量。我们需要存储每一条边。

class Solution:def findItinerary(self, tickets):import heapqfrom collections import defaultdictself.ticket_path = defaultdict(list)for depart, arrival in tickets:self.ticket_path[depart].append(arrival)for key in self.ticket_path:heapq.heapify(self.ticket_path[key])self.result = []self.traversal('JFK')return self.result[::-1]def traversal(self, depart):while self.ticket_path[depart]:arrival = heapq.heappop(self.ticket_path[depart])self.traversal(arrival)self.result.append(depart)

51. N皇后 

题目链接:https://leetcode.com/problems/n-queens/

解法:

可以将过程抽象为一棵树,

其他的细节,直接看题解好了:代码随想录-n皇后

边界条件:无

时间复杂度:O(n!)

空间复杂度:O(n)

class Solution(object):def solveNQueens(self, n):self.result = []self.dashboard = ['.' * n for _ in range(n)] self.traversal(n, 0)return self.resultdef traversal(self, n, row):# 如果最后一行填满了,返回if row == n:self.result.append(self.dashboard[:])returnfor col in range(n):if self.isValid(row, col):self.dashboard[row] = self.dashboard[row][:col] + 'Q' + self.dashboard[row][col+1:]self.traversal(n, row+1)self.dashboard[row] = self.dashboard[row][:col] + '.' + self.dashboard[row][col+1:]def isValid(self, row, col):# 检查同一列是否已经存在皇后,# 如果同一个col,上面的row已经存在,则不能再放for i in range(row):if self.dashboard[i][col] == 'Q':return False# 检查左上角是否已经存在皇后i, j = row - 1, col - 1while i >= 0 and j >= 0:if self.dashboard[i][j] == 'Q':return Falsei -= 1j -= 1# 检查右上角是否已经存在皇后i, j = row - 1, col + 1while i >= 0 and j < len(self.dashboard):if self.dashboard[i][j] == 'Q':return Falsei -= 1j += 1return True

37. 解数独 

题目链接:解数独

解法:

这道题真的挺复杂的,代码写出来以后,看似明白了,待自己模拟运行一遍,就会发现其实理解还有待加强。算法的复杂度那是相当的高。

直接看题解吧:代码随想录-解数独

边界条件:无

时间复杂度:

空间复杂度:

class Solution(object):def solveSudoku(self, board):""":type board: List[List[str]]:rtype: None Do not return anything, modify board in-place instead."""self.traversal(board)def traversal(self, board):for i in range(9):for j in range(9):if board[i][j] != '.': continuefor val in range(1, 10):if self.isValid(i, j, board, str(val)):board[i][j] = str(val)if self.traversal(board):return Trueboard[i][j] = '.'return Falsereturn Truedef isValid(self, row, col, board, val):# check the same rowfor i in range(9):if board[row][i] == val:return False# check the same columnfor j in range(9):if board[j][col] == val:return False# check subboxstartRow = (row // 3) * 3startCol = (col // 3) * 3for row in range(startRow, startRow+3):for col in range(startCol, startCol+3):if board[row][col] == val:return Falsereturn True

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

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

相关文章

如何通过信息化为燃气管道提供数据监控、智能的调度和作业技术?

关键词&#xff1a;智慧燃气、燃气监控、智慧管网、智慧燃气管网、智慧燃气管网解决方案、城市燃气管网 在信息化迅猛发展的历史潮流中&#xff0c;如何通过信息化为燃气管道提供更广泛的数据监控、更紧密的数据集成、更智能的调度和作业、更智慧的分析和决策&#xff0c;为安…

《李光耀观天下》书摘

一、中国&#xff1a;一个强大的中央 他从不抱怨或发牢骚&#xff0c;努力工作&#xff0c;慢慢的证明自己。 你们完全可以做到比我们更好&#xff0c;因为我们是中国南方没有土地的农民后代。你们有学者&#xff0c;有科学家&#xff0c;有专家。你们将比我们做得更好。 邓…

01-鸿蒙4.0学习之开发环境搭建 HelloWorld

HarmonyOS开发学习 1.环境配置 1.下载地址 开发工具&#xff1a;DevEco Studio 3.1.1 Release 下载地址 安装选择快捷方式 安装nodejs和Ohpm 安装SDK 选择同意Accept 检测8项目是否安装成功 2.创建项目 —— hello word

C语言第三十五弹---打印九九乘法表

C语言打印九九乘法表 思路&#xff1a;观察每一行可以看出乘号右边的一行值都是相同的&#xff0c;而乘号左边不断变化&#xff0c;所以使用嵌套循环&#xff0c;控制好 乘号左右值变化的条件即可。 #include <stdio.h>int main() {for (int i 1; i < 9; i){for (in…

森林无人机高效解决巡查难题,林区防火掀新篇

山东省某市为了强化森林火灾防范&#xff0c;采用了一项新兴手段——复亚智能无人机森林火情监测系统。这套系统在AI飞行大脑的指挥下&#xff0c;让无人机在空中巡逻&#xff0c;实现了无人机森林防火系统的实施落地。 一、AI大脑如何引领森林无人机高空巡逻&#xff1f; 在山…

jQuery_10 jQuery中的网路请求(AJAX)

jQuery中如何使用网络请求呢&#xff1f; 使用jQuery提供的函数实现ajax请求的处理 代替直接使用xmlhttprequest对象 但是jQuery实际上还是使用的异步对象&#xff0c;其实就是简化了步骤&#xff0c;但是根源是一样的 1.$.ajax() 1.$.ajax({ url:请求的地址, // 必须的 type…

C++ :const修饰成员函数

常函数&#xff1a; 常函数&#xff1a; 成员函数后加const后我们称为这个函数为常函数 常函数内不可以修改成员属性 成员属性声明时加关键字mutable后&#xff0c;在常函数中依然可以修改 属性可修改&#xff1a; class Person { public: void showPerson() …

【开题报告】基于uniapp的瑜伽学习交流小程序的设计与实现

1.选题背景 瑜伽在现代社会中越来越受到人们的关注和喜爱。它不仅可以帮助人们塑造健美的身材&#xff0c;还能促进身心健康、提高生活质量。然而&#xff0c;由于瑜伽动作的复杂性和技巧性&#xff0c;很多初学者在学习过程中会遇到困难和挑战。 同时&#xff0c;由于工作和…

3-docker-基于ubuntu镜像构建redis镜像

第一步&#xff1a;编辑Dockerfile 第二步&#xff1a;执行命令构建镜像 第三步&#xff1a;查看构建完成的镜像 第四步&#xff1a;镜像运行成容器 第五步&#xff1a;查看正在运行的容器 第六步&#xff1a;进入到容器 第一步&#xff1a;编辑Dockerfile vi Dockerfile# 写入…

云原生实战课大纲<2>

我们pod的数据挂载文件可以使用 pv-pvc的方式 1. 创建pv池 2. 在pv池中创建pv&#xff0c;并且设置pv的模式 3. 编写pod 写对应的pvc 申请书 就可以了这就是我们k8s中的pv和pvc 基于pv池创建pv的时候会有容量限制呢么关于配置呢&#xff0c;我们以前会有这种场景 比如说在dock…

Java之API(上):Character

一、前言&#xff1a; 我们上次讲到 java.lang.*下的八大包装类&#xff1a; 八大包装类 基本数据类型byteshortintlongfloatdoublecharboolean引用数据类型(对象)ByteShortIntegerLongFloatDoubleCharacterBoolean 之前讲到了比较常用的Integer包装类&#xff0c;但是前面6个包…

文件夹重命名:克服语言障碍,批量将中文文件夹名翻译成英文

随着全球化的不断深入&#xff0c;英语成为了世界上最广泛使用的语言。在日常生活和工作中&#xff0c;可能经常要将中文文件夹名翻译成英文&#xff0c;以便交流或满足特定需求。手动翻译文件夹名不仅耗时&#xff0c;还容易出错。那有什么方法可以快速、准确地批量将中文文件…

力扣 965. 单值二叉树

目录 1.解题思路2.代码实现 1.解题思路 如果一个结点的子节点与其相同&#xff0c;那么就沿着子节点进行遍历. 2.代码实现 bool isUnivalTree(struct TreeNode* root){ if(rootNULL)return true;if(root->left){if(root->val!root->left->val||!isUnivalTree(ro…

2T以上的硬盘需要转GPT格式再分区

在大多数老旧的系统上&#xff0c;你可能遇到了MBR&#xff08;Master Boot Record&#xff09;分区表的限制&#xff0c;它最大支持2TB的分区。这解释了为什么你的逻辑卷无法创建超过2TB的分区。 为了支持超过2TB的分区&#xff0c;你需要使用GPT&#xff08;GUID Partition …

RT-DETR算法优化改进:AKConv(可改变核卷积),即插即用的卷积,效果秒杀DSConv | 2023年11月最新发表

💡💡💡本文全网首发独家改进:可改变核卷积(AKConv),赋予卷积核任意数量的参数和任意采样形状,为网络开销和性能之间的权衡提供更丰富的选择,解决具有固定样本形状和正方形的卷积核不能很好地适应不断变化的目标的问题点,效果秒殺DSConv 1)AKConv替代标准卷积进行…

基于可微分渲染器的相机位置优化【PyTorch3D】

在这个教程中&#xff0c;我们将使用可微渲染学习给定参考图像的相机的 [x, y, z] 位置。 我们将首先使用相机的起始位置初始化渲染器。 然后&#xff0c;我们将使用它来生成图像&#xff0c;使用参考图像计算损失&#xff0c;最后通过整个管道进行反向传播以更新相机的位置。…

Django创建基本的app应用并配置URL路径-成功运行服务

开发环境&#xff1a;Pycharm2021 Win11 首先创建虚拟环境: 可参考&#xff1a; Pycharm开发环境下创建python运行的虚拟环境&#xff08;自动执行安装依赖包&#xff09;_pycharm自动下载依赖包_heda3的博客-CSDN博客 1、安装 Django 在虚拟环境下安装pip install django …

从容应对高并发:RabbitMQ与消息限流策略的完美结合

在当今互联网时代&#xff0c;高并发访问已成为许多应用系统面临的常见挑战之一。对于需要处理大量请求的系统来说&#xff0c;如何保证系统的稳定性和可靠性是一个关键问题。RabbitMQ作为一种可靠的消息队列中间件&#xff0c;可以帮助解决高并发环境下的消息处理问题。而结合…

JAXB的XmlAttribute注解

JAXB的XmlAttribute注解&#xff0c;将一个JavaBean属性映射到一个XML属性。 例如&#xff0c;下面的Java代码&#xff0c;将属性currency映射到了XML的属性currency&#xff1a; package com.thb;import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind…

Python中元组的不变性与包含可变列表的矛盾之美

在Python中&#xff0c;元组&#xff08;tuple&#xff09;被广泛使用&#xff0c;它是一种不可变的数据结构&#xff0c;一旦创建&#xff0c;其元素无法被修改。然而&#xff0c;有趣的是&#xff0c;元组内部可以包含可变的列表。这种看似矛盾的设计其实为编程提供了一种灵活…