Java每日一练(20230505) 递增路径、编辑距离、数据流

news2025/2/24 3:46:45

目录

1. 矩阵中的最长递增路径  🌟🌟🌟

2. 编辑距离  🌟🌟🌟

3. 数据流的中位数  🌟🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 矩阵中的最长递增路径

给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。

对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。

示例 1:

输入:matrix = [[9,9,4],[6,6,8],[2,1,1]]
输出:4 
解释:最长递增路径为 [1, 2, 6, 9]。

示例 2:

输入:matrix = [[3,4,5],[3,2,6],[2,2,1]]
输出:4 
解释:最长递增路径是 [3, 4, 5, 6]。注意不允许在对角线方向上移动。

示例 3:

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

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 200
  • 0 <= matrix[i][j] <= 2^31 - 1

出处:

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

代码:

import java.util.*;
class longestIncreasingPath {
    public static class Solution {
        public int longestIncreasingPath(int[][] matrix) {
            if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
                return 0;
            }
            int max = 0;
            int row = matrix.length;
            int col = matrix[0].length;
            int[][] dp = new int[row][col];
            for (int i = 0; i < row; i++) {
                for (int j = 0; j < col; j++) {
                    max = Math.max(max, loop(matrix, Integer.MIN_VALUE, dp, i, j));
                }
            }
            return max;
        }
        private int loop(int[][] mat, int pre, int[][] dp, int i, int j) {
            if (i < 0 || j < 0 || i >= mat.length || j >= mat[0].length || mat[i][j] <= pre) {
                return 0;
            }
            if (dp[i][j] != 0) {
                return dp[i][j];
            }
            int max = 0;
            max = Math.max(max, loop(mat, mat[i][j], dp, i - 1, j));
            max = Math.max(max, loop(mat, mat[i][j], dp, i + 1, j));
            max = Math.max(max, loop(mat, mat[i][j], dp, i, j - 1));
            max = Math.max(max, loop(mat, mat[i][j], dp, i, j + 1));
            dp[i][j] = max + 1;
            return dp[i][j];
        }
    }
    public static void main(String[] args) {
        Solution obj = new Solution();
        int[][] matrix = {{9,9,4},{6,6,8},{2,1,1}};
        System.out.println(obj.longestIncreasingPath(matrix));
        int[][] matrix2 = {{3,4,5},{3,2,6},{2,2,1}};
        System.out.println(obj.longestIncreasingPath(matrix2));
   }
}

输出:

4
4


2. 编辑距离

给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。

你可以对一个单词进行如下三种操作:

  • 插入一个字符
  • 删除一个字符
  • 替换一个字符

示例 1:

输入:word1 = "horse", word2 = "ros"
输出:3
解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删除 'e')

示例 2:

输入:word1 = "intention", word2 = "execution"
输出:5
解释:intention -> inention (删除 't')inention -> enention (将 'i' 替换为 'e')enention -> exention (将 'n' 替换为 'x')exention -> exection (将 'n' 替换为 'c')exection -> execution (插入 'u')

提示:

  • 0 <= word1.length, word2.length <= 500
  • word1 和 word2 由小写英文字母组成

以下程序实现了这一功能,请你填补空白处内容:

```Java
class Solution {
    public int minDistance(String word1, String word2) {
        int len1 = word1.length();
        int len2 = word2.length();
        if (len1 * len2 == 0)
            return len1 + len2;
        String longerStr = len1 > len2 ? word1 : word2;
        String shorterStr = len1 > len2 ? word2 : word1;
        int shorterOne = Math.min(len1, len2);
        int[] dp = new int[shorterOne + 1];
        for (int i = 0; i < shorterOne + 1; i++) {
            dp[i] = i;
        }
        for (int j = 1; j <= longerStr.length(); j++) {
            int left = j;
            for (int i = 1; i <= shorterStr.length(); i++) {
                int updateDown = dp[i] + 1;
                int updateLeft = left + 1;
                int updateLeftDown = dp[i - 1];
                if (longerStr.charAt(j - 1) != shorterStr.charAt(i - 1)) {
                    updateLeftDown++;
                }
                int min = Math.min(updateLeft, Math.min(updateDown, updateLeftDown));
                dp[i - 1] = left;
                _____________________;
            }
        }
        return dp[shorterOne];
    }
}
```

出处:

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

代码:

import java.util.*;
class minDistance {
    public static class Solution {
        public int minDistance(String word1, String word2) {
            int len1 = word1.length();
            int len2 = word2.length();
            if (len1 * len2 == 0)
                return len1 + len2;
            String longerStr = len1 > len2 ? word1 : word2;
            String shorterStr = len1 > len2 ? word2 : word1;
            int shorterOne = Math.min(len1, len2);
            int[] dp = new int[shorterOne + 1];
            for (int i = 0; i < shorterOne + 1; i++) {
                dp[i] = i;
            }
            for (int j = 1; j <= longerStr.length(); j++) {
                int left = j;
                for (int i = 1; i <= shorterStr.length(); i++) {
                    int updateDown = dp[i] + 1;
                    int updateLeft = left + 1;
                    int updateLeftDown = dp[i - 1];
                    if (longerStr.charAt(j - 1) != shorterStr.charAt(i - 1)) {
                        updateLeftDown++;
                    }
                    int min = Math.min(updateLeft, Math.min(updateDown, updateLeftDown));
                    dp[i - 1] = left;
                    if (i == dp.length - 1) {
                        dp[i] = min;
                    } else {
                        left = min;
                    }
                }
            }
            return dp[shorterOne];
        }
    }
    public static void main(String[] args) {
        Solution obj = new Solution();
        String word1 = "horse";
        String word2 = "ros";
        System.out.println(obj.minDistance(word1, word2));
        word1 = "intention";
        word2 = "execution";
        System.out.println(obj.minDistance(word1, word2));
   }
}

输出:

3
5


3. 数据流的中位数

中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。

例如,

[2,3,4] 的中位数是 3

[2,3] 的中位数是 (2 + 3) / 2 = 2.5

设计一个支持以下两种操作的数据结构:

  • void addNum(int num) - 从数据流中添加一个整数到数据结构中。
  • double findMedian() - 返回目前所有元素的中位数。

示例:

addNum(1)
addNum(2)
findMedian() -> 1.5
addNum(3) 
findMedian() -> 2

进阶:

  1. 如果数据流中所有整数都在 0 到 100 范围内,你将如何优化你的算法?
  2. 如果数据流中 99% 的整数都在 0 到 100 范围内,你将如何优化你的算法?

出处:

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

代码:

import java.util.*;
class MedianFinder {
    PriorityQueue<Integer> min;
    PriorityQueue<Integer> max;
    /** initialize your data structure here. */
    public MedianFinder() {
        min = new PriorityQueue<>();
        max = new PriorityQueue<>((a, b) -> {
            return b - a;
        });
    }
    public void addNum(int num) {
        max.add(num);
        min.add(max.remove());
        if (min.size() > max.size())
            max.add(min.remove());
    }
    public double findMedian() {
        if (max.size() == min.size())
            return (max.peek() + min.peek()) / 2.0;
        else
            return max.peek();
    }
    public static void main(String[] args) {
        MedianFinder obj = new MedianFinder();
        obj.addNum(1);
        obj.addNum(2);
        System.out.println(obj.findMedian());
        obj.addNum(3);
        System.out.println(obj.findMedian());
   }
}
/**
 * Your MedianFinder object will be instantiated and called as such:
 * MedianFinder obj = new MedianFinder();
 * obj.addNum(num);
 * double param_2 = obj.findMedian();
 */

输出:

1.5
2.0


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏

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

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

相关文章

解决修改es默认host时的问题

微信公众号也不定期更新&#xff0c; leetcode_algos_life 背景 es默认只能是在非root场景下进行启动&#xff0c;且默认host是本地地址&#xff0c;即localhost或者是127.0.0.1。 当线上部署restful服务时&#xff0c;此时如果其他服务与es服务不在同一台机器上&#xff0c;会…

Mysql数据库管理与高可用

目录 一、克隆/复制一个表1.1 方法一1.2 方法二 二、清空表&#xff0c;删除表内所有数据2.1 方法一2.2 方法二2.3 drop、truncate、delete对比①.drop table name②.truncate table table_name③.delete from table_name小结&#xff1a; 三、创建临时的表四、用户管理4.1 新建…

MSQL知识学习07(MySQL执行计划分析)

1、什么是执行计划&#xff1f; 执行计划 是指一条 SQL 语句在经过 MySQL 查询优化器 的优化会后&#xff0c;具体的执行方式。 执行计划通常用于 SQL 性能分析、优化等场景。通过 EXPLAIN 的结果&#xff0c;可以了解到如数据表的查询顺序、数据查询操作的操作类型、哪些索引…

【刷题之路Ⅱ】LeetCode 143. 重排链表

【刷题之路Ⅱ】LeetCode 143. 重排链表 一、题目描述二、解题1、方法1——线性表辅助1.1、思路分析1.2、代码实现 2、方法2——中间节点反转链表合并链表2.1、思路分析2.2、代码实现 一、题目描述 原题连接&#xff1a; 143. 重排链表 题目描述&#xff1a; 给定一个单链表 L …

7. Docker——Dockerfile

本章讲解知识点 DockerfileDockerfile 常用命令Dockerfile 综合示例Docker Compose当我们理解了镜像的基本原理后,我们就可以开始 Dockerfile 的学习了。 1. Dockerfile Dockerfile 是用于构建 Docker 镜像的脚本。它包含一组指令,按顺序执行以创建 Docker 镜像,从而使其可…

多通道振弦传感器无线采集仪通过短信和FTP文件修改参数

多通道振弦传感器无线采集仪通过短信和FTP文件修改参数 通过短信修改参数 向设备发送参数修改指令&#xff0c;设备在下次采发过程中若收到包含有合法指令的短信时会解析并执行短信内的指令&#xff0c;参数修改完成后会以短信形式回发应答信息。短信指令的格式如下&#xff1a…

ChatGPT实现仪表盘生成

仪表盘生成 Grafana是开源社区最流行的数据可视化软件&#xff0c;一定程度上也和 superset 一起被视为 tableau 等商业 BI 的开源替代品&#xff0c;很多IT 团队、科研团队&#xff0c;都会使用 Grafana 来做数据监控、挖掘分析。Grafana社区也有很多贡献者&#xff0c;在 gi…

设计模式-基本概念

设计模式-基本概念 基本概念奇异递归模板模式&#xff08;CRTP&#xff09;说明示例例子1&#xff1a;对象计数例子2&#xff1a;多态复制构造例子4&#xff1a;std::enable_shared_from_this例子5 树简单遍历 混合继承属性SOLID 设计原则 参考 基本概念 奇异递归模板模式&…

带你彻底理解Spark的分区

前言 我&#xff1a;什么是RDD&#xff1f; 面试者&#xff1a;RDD是被分区的&#xff0c;由一系列分区组成… … 我&#xff1a;你怎么理解分区&#xff1f; 面试者&#xff1a;… 我&#xff1a;Spark中有哪些可以实现分区的方法&#xff1f;分别使用的场景是什么&#xff1…

nodejs-前端工程化环境-安装-webpack打包工具

文章目录 1.安装nodejs1.1.新建项目1.2.安装jQuery。1.3.查看全局模块安装目录 2.安装Vue2.1.安装2.2.创建vue项目 3.安装webpack4.安装 Grunt5.安装uglify-js > js代码压缩打包工具。6.因为在此系统上禁止运行脚本……解决办法 1.安装nodejs 从官网下载长期支持版本&#…

数值分析-埃尔米特插值的概念、实现与应用

目录 一、引言 二、埃尔米特插值的基本概念 2.1 埃尔米特插值的定义 2.2 埃尔米特插值的优点 三、埃尔米特插值的实现方法 3.1 基于拉格朗日插值的埃尔米特插值 2.2 基于牛顿插值的埃尔米特插值 四、埃尔米特插值的应用 4.1 基于埃尔米特插值的函数逼近 4.2 基于埃尔…

2分钟搞懂人工智能、机器学习和深度学习

不少高校的小伙伴找我聊入门人工智能该怎么起步&#xff0c;如何快速入门&#xff0c;多长时间能成长为中高级工程师&#xff08;聊下来感觉大多数学生党就是焦虑&#xff0c;毕业即失业&#xff0c;尤其现在就业环境这么差&#xff09;&#xff0c;但聊到最后&#xff0c;很多…

java遍历集合的方法

java中&#xff0c;集合的遍历是一项基本且重要的技能。我们不仅要知道集合中元素的个数&#xff0c;还要知道元素的值&#xff0c;以及它们之间的关系。 在 Java中&#xff0c;如果需要遍历集合中的某个元素&#xff0c;可以使用以下方法&#xff1a; 1.通过 return语句将集合…

工赋开发者社区 | 装备制造企业数字化转型总体框架

导读 当前&#xff0c;面对技术、市场以及供应链等多重挑战&#xff0c;在软件定义、数据驱动、数字孪生、大数据、人工智能及元宇宙等技术加持下&#xff0c;装备制造企业不断采用新工艺、新材料&#xff0c;以新模式推动产品快速创新。企业积极关注并探索数字化转型路径&…

ThingsBoard使用docker compose集群部署

1、概述 今天我将讲解官方文档说的使用docker compose集群部署ThingsBoard,这种部署方式也是目前企业中常用的形式,希望大家能够掌握,我不是直接使用官方的镜像,我是自己拉起代码,然后自己构建镜像,在传到服务器上,使用自己的镜像来部署。而且这种部署中间有个大坑,我…

雷达原理_有源干扰_间歇采样直接、重复、循环转发干扰_含MATLAB实现代码

间歇采样直接、重复、循环转发干扰 间歇采样转发干扰是在雷达脉冲周期内对雷达信号进行间歇采样&#xff0c;并通过干扰机将采样的信号进行处理和转发&#xff0c;从而生成相干的假目标信号。这种干扰方式的原理可分为直接转发、重复转发和逐次循环转发三种方式。直接转发是指…

这个档案室管理妙招,太有用了!

档案是人类文明发展到一定历史阶段的产物&#xff0c;是人类活动的真实记录&#xff0c;也是新的社会实践最可靠的凭证和依据。 借助档案&#xff0c;我们能够更好地了解过去、把握现在、预见未来&#xff0c;是一种宝贵的无形资产&#xff0c;也是一种不可再生资源。因此&…

Pandas + AI = PandasAI【Python】

Pandas AI 是一个 Python 库&#xff0c;它为流行的数据分析和操作工具 Pandas 添加了生成式AI能力。 PandasAI旨在与 Pandas 结合使用&#xff0c;而不是它的替代品。 推荐&#xff1a;用 NSDT场景设计器 快速搭建3D场景 1、安装PandasAI 使用如下命令安装pandas-ai&#xf…

linux中TF启动卡制作:磁盘分区文件同步

文章目录 前言&#xff1a;1. 连接TF卡2. 磁盘卸载载与分区2.1 磁盘卸载2.2 创建第一个分区2.3 创建第二个分区 3. 磁盘格式化4. 文件同步5. 检查与BOOT分区启动文件拷贝总结&#xff1a; 前言&#xff1a; TF卡在linux环境下配置好相关软件后&#xff0c;把配置好的系统以及软…

Neo4j图数据库的数据模型_包括节点_属性_数据_关系---Neo4j图数据库工作笔记0002

来看一下neo4j的特性 这个neo4j特点就是简单,这里用最快的速度学习 可以看到一个圈表示一个节点,然后两个节点直接可以有关系,关系可以是双向的