LeetCode(字节10日)-0714

648. 单词替换(中等)

思路:前缀树匹配

//  思路:前缀树匹配,成功返回前缀,失败返回 null,保留原来单词值
//  多个词根时使用最短词根,不需要 fail 指针
//  string 处理使用 stringBuilder,避免 string 运算带来过大开销
class Solution {class Node{public Node[] children;public boolean isEnd;public String word;public Node (){children = new Node[26];isEnd = false;word = null;}}class TrieTree {public Node root;public TrieTree(){root = new Node();}public void insert(String word){Node current = root;for(char c : word.toCharArray()){Node temp = current.children[c-'a'];if(temp==null){temp = new Node();current.children[c-'a'] = temp;}current = temp;}current.isEnd = true;current.word = word;}public String match(String word){Node current = root;for(char c :word.toCharArray()){Node temp = current.children[c-'a'];if(temp==null){return current.word;}if(temp.isEnd){return temp.word;}current = temp;}return current.word;}}public String replaceWords(List<String> dictionary, String sentence) {TrieTree tree = new TrieTree();for(String w:dictionary){tree.insert(w);}StringBuilder res = new StringBuilder();StringBuilder tempWord = new StringBuilder();sentence+=' ';for(char c:sentence.toCharArray()){if(c==' '&&tempWord.length()!=0){String temp = tempWord.toString();tempWord.setLength(0);String match = tree.match(temp);res.append(match==null?temp:match);res.append(' ');}else {tempWord.append(c);}}res.deleteCharAt(res.length()-1);return res.toString();}
}

662. 二叉树最大宽度(中等)

问题:一开始没有仔细审题,犯大忌

 // 思路:层序遍历,带 for 循环的层序遍历,另开节点存储完全二叉树的 id
class Solution {class Node{public TreeNode tn;public int id;public Node(TreeNode treeNode,int i){tn = treeNode;id = i;}}public int widthOfBinaryTree(TreeNode root) {Queue<Node> queue = new LinkedList<>();queue.offer(new Node(root,1));int max = 1;while(queue.size()>0){int len = queue.size();int first = 0,last = 0;for(int i=0;i<len;i++){Node temp = queue.poll();if(temp.tn.left!=null){if(first==0)first = temp.id*2;queue.offer(new Node(temp.tn.left,temp.id*2));last = temp.id*2;}if(temp.tn.right!=null){if(first==0)first = temp.id*2+1;queue.offer(new Node(temp.tn.right,temp.id*2+1));last = temp.id*2+1;}if(last-first+1>max)max = last-first+1;}}return max;}
}

1631. 最小体力消耗路径(中等)

思路:

  1. 一开始考虑到路径是全局最优贪心可能不行,就没有考虑使用 BFS,直接DFS,然后超时;
  2. 又考虑记忆化搜索+剪枝还是超时,可能没有优化好;
  3. 最后看了一眼题解原来可以用 dij,就思考 dij;
    1. 关键点在于 visit 这个节点的时候一定要保证这个节点是最优距离,不能再被更新成更好的,不然以他为起点搜索的都白费了。
    2. 所以采用优先队列选择,每次只选择最优的节点去处理,
    3. 如果按照传统的 dij 方法,搜索距离最短且 visit 为 false的节点,需要 m*n 遍历节点太慢,采用了优先队列
    4. 采用优先队列有个问题就是,每次更新了一个节点的距离值,这个节点会再次入队,但是出队的时候一定是最优解先出来。但是后续的非最优解也会出队接受 visit,这里就需要判断,访问过就不要再访问了。
    5. 同时优先队列的 Compator 方法不能把外部变量作为比较值,外部变量变化会导致排序出问题
class Solution {public int minimumEffortPath(int[][] heights) {int n = heights.length;int m = heights[0].length;int length[][] = new int[n][m];int direct[][] = new int[][]{{1,0},{0,1},{-1,0},{0,-1}};Queue<int[]> pq = new PriorityQueue<>(Comparator.comparingInt(o -> o[2]));boolean visit[][] = new boolean[n][m];for(int i=0;i<n;i++)for(int j=0;j<m;j++)length[i][j] = 1000001;length[0][0] = 0;pq.offer(new int[]{0,0});while(!pq.isEmpty()){int[] point = pq.poll();if(visit[point[0]][point[1]]) continue;visit[point[0]][point[1]] = true;for (int i=0;i<4;i++){int tx = point[0] + direct[i][0];int ty = point[1] + direct[i][1];if(tx<0||tx>=n||ty<0||ty>=m||visit[tx][ty])continue;int difference = Math.abs(heights[point[0]][point[1]]-heights[tx][ty]);int tp = Math.max(length[point[0]][point[1]],difference);if(tp<length[tx][ty]){length[tx][ty] = tp;pq.offer(new int[]{tx,ty,tp});}}}return length[n-1][m-1];}
}

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

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

相关文章

如何使用DiskPart命令行格式化分区?

想要格式化磁盘分区&#xff0c;您可以使用磁盘管理工具&#xff0c;或在Windows文件资源管理器中右键单击驱动器并选择“格式化”。如果您更想使用命令行来格式化磁盘&#xff0c;那么Windows自带的DiskPart将是首选。 DiskPart有很多优点&#xff0c;例如&#xff0c;如果您想…

最短Hamilton路径

题目 给定一张 n 个点的带权无向图&#xff0c;点从 0∼n−1 标号&#xff0c;求起点 0 到终点 n−1 的最短 Hamilton 路径。 Hamilton 路径的定义是从 0 到 n−1 不重不漏地经过每个点恰好一次。 输入格式 第一行输入整数 n。 接下来 n 行每行 n 个整数&#xff0c;其中第…

活动页服务端渲染探索

目标 通过采用在服务端渲染激励页的方式&#xff0c;降低页面加载白屏时间&#xff0c;从而提升激励 H5 渲染体验。 架构设计 前端服务框架调研选型 只对比分析以下两种方案&#xff1a; Vue3 Nuxt3 WebpackNext.js React Node.js ’Nuxt3Next.js介绍Nuxt是一个基于Vu…

Clickhouse基础和基本优化

CK基础和基本优化 一、ClickHouse的特点列式存储高吞吐写入能力数据分区与线程级并行表引擎的使用MergeTreeReplacingMergeTreeSummingMergeTree 二、SQL操作1.Insert2.Update 和 Delete3.查询操作4.alter操作5.导出数据 三、基于表的分布式集群集群写入流程&#xff08; 3分片…

旅游卡加盟代理合伙人模式软件开发

旅游卡加盟代理合伙人模式是近年来逐渐兴起的一种旅游产业发展模式&#xff0c;它通过将旅游卡加盟商与代理商紧密结合&#xff0c;实现资源共享、风险共担、合作共赢的目标。而软件开发作为旅游卡加盟代理合伙人模式的重要技术支持&#xff0c;对于该模式的实施和发展起着至关…

深入理解Java虚拟机(二)Java内存区域与内存溢出异常

一、前言 对于Java程序员来说&#xff0c;在虚拟机自动内存管理机制的帮助下&#xff0c;不再需要为每一个new操作去写配对的delete/free代码&#xff0c;不容易出现内存泄漏和内存溢出问题&#xff0c;看起来由虚拟机管理内存一切都很美好。不过&#xff0c;也正是因为Java程序…

SQLite和SDK基本概念

SQLite是一种轻量级的关系型数据库管理系统 (RDBMS)&#xff0c;它以文件形式存储数据&#xff0c;不需要独立的服务器进程&#xff0c;可以直接集成到应用程序中使用。SQLite的设计目标是提供一种简单、快速、可靠的数据库解决方案&#xff0c;适用于各种规模的应用程序和设备…

iOS APP外包开发的语言比较

iOS APP是Apple公司运行在iPhone手机上的APP&#xff0c;开发这样的APP有两种开发语言可以选择&#xff0c;都是由Apple公司提供的语言。其中Objective-C使用时间相对较长&#xff0c;有历史兼容考虑&#xff0c;而Swift是新的开发语言&#xff0c;更符合近些年开发语言的发展理…

Vue单页面实现el-tree el-breadcrumb功能、el-tree右键点击树节点展示菜单功能、树节点编辑节点字段名称功能

(1) 点击el-tree节点 使用el-breadcrumb展示选中树节点及父项数据 重点&#xff1a;handleNodeClick方法、getTreeNode方法 (2) 选择el-breadcrumb-item设置el-tree节点选中 必须设置属性: current-node-key"currentNodeKey" 、 node-key"id" 重点: 设置…

如何应对.kann勒索病毒:恢复数据的有效策略

导言&#xff1a; 随着科技的发展和互联网的普及&#xff0c;网络安全问题越来越受到人们的关注。而在网络安全领域&#xff0c;勒索病毒是一类极具破坏力的恶意软件。其中&#xff0c; .kann 勒索病毒是近期出现的一种恶意软件变种。91数据恢复本文将介绍什么是 .kann 勒索病毒…

05 Docker 安装常用软件 (mongoDB)

目录 1. mongoDB简介 1.1 mongodb的优势 2. mongodb的安装 2.1 创建数据文件夹 2.2 备份日志 2.3 配置文件夹 2.4 创建两个文件 ---> 2.4.1 配置如下: 2.5 拉取mongodb 2.6 运行容器 2.7 进入mongodb容器 ---> 2.7.0 高版本(6.0)以上是这样的 , 旧版的没研究 …

C++的虚函数与纯虚函数

C的虚函数是一种特殊的成员函数&#xff0c;用于实现多态性。虚函数允许在基类中声明一个函数&#xff0c;在派生类中根据需要进行重写&#xff0c;并通过基类指针或引用来调用派生类对象的特定实现。 ①虚函数的声明 ②多态性 ③派生类重写虚函数 ④纯虚函数 ⑤注意 ①虚…

服务保护 Sentinel

服务保护 Sentinel Sentinel 介绍Sentinel 的下载使用Sentinel 流控规则流控规则介绍流控规则演示 Sentinel 热点规则Sentinel 隔离和熔断降级Feign 整合 Sentinel线程隔离熔断降级 Sentinel 授权规则Sentinel 系统规则Sentinel 自定义异常Sentinel 资源定义url 默认资源抛出异…

课程上新!5天学懂大数据框架Kafka

学习Kafka对于现代数据处理和分析至关重要。它能够帮助我们处理海量数据流&#xff0c;确保数据的可靠性&#xff0c;支持实时流处理&#xff0c;并且具有广泛的应用场景。通过掌握Kafka的知识和技能&#xff0c;我们可以在数据驱动的世界中更好地应对挑战&#xff0c;取得更大…

【力扣周赛】第 354 场周赛

文章目录 Q1&#xff1a;6889. 特殊元素平方和思路——简单模拟题竞赛时代码 Q2&#xff1a;6929. 数组的最大美丽值思路——差分数组&#xff0c;计算每个数字可能出现的次数竞赛时代码解法2——排序 双指针⭐解法3——排序 二分查找 Q3&#xff1a;6927. 合法分割的最小下标…

Linux 漏洞扫描

Linux 漏洞扫描程序会仔细检查基于 Linux 的系统&#xff0c;以减轻潜在的风险和漏洞。 什么是 Linux 漏洞扫描程序 Linux 漏洞扫描程序是一种专门的漏洞扫描工具&#xff0c;旨在识别基于 Linux 的系统中的安全漏洞和弱点,它会扫描配置错误、过时的软件版本和已知漏洞。 为…

pytorch学习--第一个模型(线性模型)

目标 我们想通过随机初始化的参数 ω , b \omega ,b ω,b能在迭代过程中使预测值和目标值能无限接近 y ω x b y\omega xb yωxb 定义数据 x torch.rand([60, 1])*10 y x*2 torch.randn(60,1)构建模型 利用pytorch中的nn.Module 想要构建模型时&#xff0c;继承这个类…

(四)「消息队列」之 RabbitMQ 路由(使用 .NET 客户端)

0、引言 先决条件 本教程假设 RabbitMQ 已安装并且正在 本地主机 的标准端口&#xff08;5672&#xff09;上运行。如果您使用了不同的主机、端口或凭证&#xff0c;则要求调整连接设置。 获取帮助 如果您在阅读本教程时遇到问题&#xff0c;可以通过邮件列表或者 RabbitMQ 社区…

Meta发布升级大模型LLaMA 2:开源可商用

论文地址&#xff1a;https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/ Github地址&#xff1a;https://github.com/facebookresearch/llama LLaMA 2介绍 Meta之前发布自了半开源的大模型LLaMA&#xff0c;自从LLaMA发布以来…

30、spring是什么

spring是什么? 1、轻量级的开源的J2EE框架。它是一个容器框架&#xff0c;用来装javabean (java对象)&#xff0c;中间层框架(万能胶)可以起一个连接作用&#xff0c;比如说把Struts和hibernate粘合在一起运用&#xff0c;可以让我们的企业开发更快、更简洁 2、Spring是一个…