Python算法练习 11.2

news2024/11/26 9:43:49

leetcode 399 除法求值

给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。

另有一些以数组 queries 表示的问题,其中 queries[j] = [Cj, Dj] 表示第 j 个问题,请你根据已知条件找出 Cj / Dj = ? 的结果作为答案。

返回 所有问题的答案 。如果存在某个无法确定的答案,则用 -1.0 替代这个答案。如果问题中出现了给定的已知条件中没有出现的字符串,也需要用 -1.0 替代这个答案。

注意:输入总是有效的。你可以假设除法运算中不会出现除数为 0 的情况,且不存在任何矛盾的结果。

注意:未在等式列表中出现的变量是未定义的,因此无法确定它们的答案。

示例 1:

输入:equations = [["a","b"],["b","c"]], values = [2.0,3.0], queries = [["a","c"],["b","a"],["a","e"],["a","a"],["x","x"]]
输出:[6.00000,0.50000,-1.00000,1.00000,-1.00000]
解释:
条件:a / b = 2.0, b / c = 3.0
问题:a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ?
结果:[6.0, 0.5, -1.0, 1.0, -1.0 ]
注意:x 是未定义的 => -1.0

示例 2:

输入:equations = [["a","b"],["b","c"],["bc","cd"]], values = [1.5,2.5,5.0], queries = [["a","c"],["c","b"],["bc","cd"],["cd","bc"]]
输出:[3.75000,0.40000,5.00000,0.20000]

示例 3:

输入:equations = [["a","b"]], values = [0.5], queries = [["a","b"],["b","a"],["a","c"],["x","y"]]
输出:[0.50000,2.00000,-1.00000,-1.00000]

 有点难,看题解理一下思路

首先初始化一下,equations和values可以看作一个带权的有向图,比如["a","b"]=2,a->b的边权值是2.0,b->a的边权值是0.5

然后对于queries的每一个元素,queries[i][0]作为起点,queries[i][1]作为终点,BFS搜索即可

class Solution(object):
    def calcEquation(self, equations, values, queries):
        """
        :type equations: List[List[str]]
        :type values: List[float]
        :type queries: List[List[str]]
        :rtype: List[float]
        """
        def bfs(start, end):
            if start not in neighbours:
                return -1.0
            queue = deque([(start, 1.0)])
            visited = set()
            while queue:
                node, val = queue.popleft()
                if node == end:
                    return val
                for i in neighbours[node]:
                    if i not in visited:
                        visited.add(i)
                        queue.append((i, val*results[node][i]))
                    
            return -1.0

        neighbours = defaultdict(set)
        results = defaultdict(dict)
        for i in range(len(equations)):
            node1, node2 = equations[i]
            neighbours[node1].add(node2)
            neighbours[node2].add(node1)
            results[node1][node2] = values[i]
            results[node2][node1] = 1.0 / values[i]
        ans_arr = []
        for j in range(len(queries)):
            start, end = queries[j]
            ans = bfs(start, end)
            ans_arr.append(ans)
        return ans_arr

leetcode 1926 迷宫中离入口最近的出口

给你一个 m x n 的迷宫矩阵 maze (下标从 0 开始),矩阵中有空格子(用 '.' 表示)和墙(用 '+' 表示)。同时给你迷宫的入口 entrance ,用 entrance = [entrancerow, entrancecol] 表示你一开始所在格子的行和列。

每一步操作,你可以往  或者  移动一个格子。你不能进入墙所在的格子,你也不能离开迷宫。你的目标是找到离 entrance 最近 的出口。出口 的含义是 maze 边界 上的 空格子entrance 格子 不算 出口。

请你返回从 entrance 到最近出口的最短路径的 步数 ,如果不存在这样的路径,请你返回 -1 。

示例 1:

输入:maze = [["+","+",".","+"],[".",".",".","+"],["+","+","+","."]], entrance = [1,2]
输出:1
解释:总共有 3 个出口,分别位于 (1,0),(0,2) 和 (2,3) 。
一开始,你在入口格子 (1,2) 处。
- 你可以往左移动 2 步到达 (1,0) 。
- 你可以往上移动 1 步到达 (0,2) 。
从入口处没法到达 (2,3) 。
所以,最近的出口是 (0,2) ,距离为 1 步。

示例 2:

输入:maze = [["+","+","+"],[".",".","."],["+","+","+"]], entrance = [1,0]
输出:2
解释:迷宫中只有 1 个出口,在 (1,2) 处。
(1,0) 不算出口,因为它是入口格子。
初始时,你在入口与格子 (1,0) 处。
- 你可以往右移动 2 步到达 (1,2) 处。
所以,最近的出口为 (1,2) ,距离为 2 步。

示例 3:

输入:maze = [[".","+"]], entrance = [0,0]
输出:-1
解释:这个迷宫中没有出口。

 看了解题思路以后就很清晰了

从起点开始,按照上下左右四个方向访问邻居格子:

如果下标未越界:

  1. 非边界结点:加入访问队列,并标记已访问(即把maze改为墙)
  2. 边界节点:直接返回(因为距离是逐渐增大的,所以不用存储列表再找最小值)
class Solution(object):
    def nearestExit(self, maze, entrance):
        """
        :type maze: List[List[str]]
        :type entrance: List[int]
        :rtype: int
        """
        directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] # 右 下 左 上
        width = len(maze[0])
        height = len(maze)
        start_y , start_x = entrance
        maze[start_y][start_x] = '+'
        queue = deque([(start_y, start_x, 0)])
        while queue:
            y, x, dis = queue.popleft()
            for i in directions:
                dir_y, dir_x = i
                new_y = y + dir_y
                new_x = x + dir_x
                if 0 <= new_y < height and 0 <= new_x < width and maze[new_y][new_x] == '.':
                    # 边界空格子
                    if  new_y == height - 1 or new_x == width - 1 or new_x == 0 or new_y == 0:
                        return dis + 1
                    else:
                        maze[new_y][new_x] = '+' # 一定别忘了 防止重复访问
                        queue.append((new_y, new_x, dis + 1))
        return -1

                

 

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

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

相关文章

【建议收藏】免费体验的AI论文写作网站-「智元兔 AI」

在当今技术飞速发展的时代&#xff0c;越来越多的领域开始应用人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;。其中&#xff0c;AI写作工具备受瞩目&#xff0c;备受推崇。 在众多的选择中&#xff0c;智元兔AI是一款在笔者使用过程中非常有帮助…

广联达OA存在未授权导致敏感信息泄漏

漏洞概述 广联达Linkworks办公OA系统存在未授权接口从而引发敏感信息泄露,攻击者可通过此漏洞获取账号密码登录后台,造成其他影响。 漏洞复现 /Services/Identification/Server/Login.aspx 页面访问如下所示&#xff1a; 拼接url路径访问&#xff1a; /Org/service/Service.…

React native window工程在macbook中打包运行环境搭建实录

做了个安卓的app&#xff0c;打算试试打包ios。但是mac中遇到许多挑战。在这记录下。 刚开始就是按照文档的操作的&#xff0c; 实际上这里Watchman 不是必须的&#xff0c; 这是监听文件变化然后自动同步更新模拟器效果的&#xff0c;完全可以修改后自己重新打包看效果&#…

selenium自动化测试入门 —— Alert/Confirm/Prompt 弹出窗口处理!

一、Alert/Confirm/Prompt弹出窗口特征说明 Alert弹出窗口&#xff1a; 提示用户信息只有确认按钮&#xff0c;无法通过页面元素定位&#xff0c;不关闭窗口无法在页面上做其他操作。 Confirm 弹出窗口&#xff1a; 有确认和取消按钮&#xff0c;该弹出窗口无法用页面元素定…

GZ035 5G组网与运维赛题第9套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项&#xff08;高职组&#xff09; 赛题第9套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通&#xff08;35分&#xff09; 子任务1&#xff1a;5G公共网络部署与调试&#xff08;15分&#xff09; 子…

不可不知的项目管理策略:十大方法论深度剖析

深入了解项目管理的十大方法论&#xff0c;包括敏捷、六西格玛、看板等&#xff0c;并探讨它们各自的优势和适用场景。本文为您提供全面的指南&#xff0c;帮助您选择最适合您项目和团队的方法论&#xff0c;提升工作效率和项目成功率。 一、什么是项目管理方法论 项目管理方法…

Rust学习日记(一)Cargo的使用

前言&#xff1a; 这是一个系列的学习笔记&#xff0c;会将笔者学习Rust语言的心得记录。 当然&#xff0c;这并非是流水账似的记录&#xff0c;而是结合实际程序项目的记录&#xff0c;如果你也对Rust感兴趣&#xff0c;那么我们可以一起交流探讨&#xff0c;使用Rust来构建程…

js替换字符串中的某个字符

let startDate2023/10/30 let strstartDate.replace(/\//g,"-") console.log(startDate,startDate) console.log(str,str)

解决安装pytorch错误

问题&#xff1a; (yanzhi) C:\Users\17648>pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 Looking in indexes: https://download.pytorch.org/whl/cu121 ERROR: Could not find a version that satisfies the requirem…

【vscode远程开发】使用内网穿透实现在公网环境下远程访问

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

柯桥日常英语培训,英语中参加商务会议需要注意什么?

PART 01 Be prepared. 做好准备。 Have the agenda, a notebook and pen, business cards and any other documents you may need ready. Determine what you can do beforehand to be ready to join in on the discussion. 准备好议程、笔记本和笔、名片以及其他可能需要的…

做海外问卷调查有什么答题技巧和方法?

大家好&#xff0c;我是橙河老师&#xff0c;这篇文章聊一聊做海外问卷调查有什么答题技巧和方法&#xff1f; 海外问卷调查&#xff0c;其实就是一些外国公司&#xff0c;对外发放的有偿市场调查问卷&#xff0c;目的是收集消费者的意见和反馈&#xff0c;我们只要按照要求去…

windows搭建Cobalt strike

使用cobaltstrike 3.14版本 window10搭建服务器 默认端口可以修改的 window10搭建客户端 双击客服端bat运行连接 监听器 windows/beacon为内置监听器&#xff0c;包括dns、http、https、smb、tcp、extc2六种方式的监听器&#xff1b;windows/foreign为外部监听器 wndows/be…

酒旅服务环境展示预约小程序的效果

酒旅业的需求度一直很高&#xff0c;交通便利又没有其它因素影响&#xff0c;酒店、景区、旅行社等生意增长迅速&#xff0c;而在实际运用中&#xff0c;随着线上化程度加快&#xff0c;传统酒旅经营企业也会面临一些痛点&#xff0c;如品牌传播、引流拓客、转化复购、内容承载…

FMC子卡解决方案:FMC214-基于FMC兼容1.8V IO的Full Camera Link 输出子卡

FMC214-基于FMC兼容1.8V IO的Full Camera Link 输出子卡 一、板卡概述   基于FMC兼容1.8V IO的Full Camera Link 输出子卡支持Base、Middle、Full Camera link信号输出&#xff0c;兼容1.8V、2.5V、3.3V IO FPGA信号输出。适配xilinx不同型号开发板和公司内部各FMC载板。北…

国标GB28181如何实时视频播放

简述 视频流媒体安防监控国标GB28181平台LiveMedia视频能力丰富&#xff0c;部署灵活&#xff0c;便捷易用既能作为业务平台使用&#xff0c;也能作为安防监控视频管理层被业务管理平台调用。国标GB28181视频监控LiveMedia平台可提供流媒体接入、处理、转发等服务&…

YOLOv8改进:最新复现SOD-YOLOv8,助力小目标检测(Small Object Detection)

💡💡💡本文独家改进:改进点:1)backbone加入CBAM;2)backbone、neck连接处加入involution注意力;3)添加一个针对小物体的额外预测头,提升小目标检测性能; SOD-YOLOv8 | 亲测在多个数据集能够实现大幅涨点,尤其在VisDrone-2019涨点显著, VisDrone-2019-DET 数…

Modelsim 用户手册(1)——Introduction

目录 一、操作结构和流程&#xff08; Operational Structure and Flow&#xff09; 二、仿真任务概述&#xff08;Simulation Task Overview&#xff09; 三、仿真基本步骤&#xff08; Basic Steps for Simulation&#xff09; 3.1 基本概念 3.1.1 文件和库映射&#xf…

Jetpack:026-Jetpack中的Slider

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了Jetpack多点触控相关的内容&#xff0c;本章回中 主要介绍Slider。闲话休提&#xff0c;让我们一起Talk Android Jetpack吧&#xff01; 1. 概念介绍 我们在本章回…

MATLAB R2023a下载链接及软件安装教程

先解释下什么是A什么是B&#xff0c;省的有些小菜们总问。 a是上半年&#xff0c;b是下半年版本&#xff0c;但是有些小弱们总是觉得只要是b一定功能多&#xff0c;这不一定的&#xff0c;同年版本b比a可能稍微全点&#xff0c;不同年的&#xff0c;比如21b&#xff0c;22a&am…