挑战100天 AI In LeetCode Day04(热题+面试经典150题)

挑战100天 AI In LeetCode Day04(热题+面试经典150题)

  • 一、LeetCode介绍
  • 二、LeetCode 热题 HOT 100-6
    • 2.1 题目
    • 2.2 题解
  • 三、面试经典 150 题-6
    • 3.1 题目
    • 3.2 题解

一、LeetCode介绍

在这里插入图片描述
LeetCode是一个在线编程网站,提供各种算法和数据结构的题目,面向程序员、计算机科学专业学生和技术爱好者等人群,旨在帮助他们提高算法和编程技能。LeetCode上的问题通常来自各种技术公司的面试题目,因此它也是程序员面试准备的重要资源之一。

LeetCode上的问题涵盖了各种难度级别,从入门级到专家级都有不同难度的题目可供练习。用户可以选择使用不同的编程语言提交答案,LeetCode能够对结果进行评估并返回测试结果。

除了题目外,LeetCode还提供了讨论区、排行榜等社区功能,用户可以在这里交流学习心得、解决疑难问题,并与其他用户比较自己的做题成绩。

挑战100天 AI In LeetCode是基于LeetCode题库,借助AI的能力进行解题、并学习其解题过程。

二、LeetCode 热题 HOT 100-6

2.1 题目

正则表达式匹配

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.''*' 的正则表达式匹配。'.' 匹配任意单个字符
'*' 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = "aa", p = "a"
输出:false
解释:"a" 无法匹配 "aa" 整个字符串。
示例 2:输入:s = "aa", p = "a*"
输出:true
解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此,字符串 "aa" 可被视为 'a' 重复了一次。
示例 3:输入:s = "ab", p = ".*"
输出:true
解释:".*" 表示可匹配零个或多个('*')任意字符('.')。提示:1 <= s.length <= 20
1 <= p.length <= 20
s 只包含从 a-z 的小写字母。
p 只包含从 a-z 的小写字母,以及字符 .*。
保证每次出现字符 * 时,前面都匹配到有效的字符

2.2 题解

时间复杂度为 O(mn),其中 m 和 n 分别为字符串 s 和模式 p 的长度;空间复杂度为 O(mn),使用了一个二维数组来存储状态。

解题思路:

这个题目可以使用动态规划来解决。我们可以定义一个二维数组 dp,其中 dp[i][j] 表示字符串 s 的前 i 个字符和模式 p 的前 j 个字符是否能匹配。

接下来,我们来考虑如何更新这个二维数组。对于 dp[i][j] 而言,有以下几种情况:

  1. 如果 p[j-1] 是普通字符(即非’.‘和’*'),则当前字符必须匹配,即 s[i-1] == p[j-1],并且前面的字符也必须匹配,即 dp[i-1][j-1] 必须为 true。
  2. 如果 p[j-1] 是’.',则当前字符可以匹配任意字符,所以只需要前面的字符匹配,即 dp[i-1][j-1] 必须为 true。
  3. 如果 p[j-1] 是’*',则有两种情况:
    • ‘’ 匹配零个前面的字符,即去掉 ‘’ 和它之前的字符,看是否匹配,即 dp[i][j-2] 必须为 true。
    • ‘*’ 匹配一个或多个前面的字符,即当前字符必须匹配,并且前面的字符串也必须匹配,即 s[i-1] == p[j-2] 或者 p[j-2] 是’.',并且 dp[i-1][j] 必须为 true。

基于以上分析,我们可以得到状态转移方程:

if (p.charAt(j-1) == ‘*’) {
dp[i][j] = dp[i][j-2] || (s.charAt(i-1) == p.charAt(j-2) || p.charAt(j-2) == ‘.’) && dp[i-1][j];
} else {
dp[i][j] = (s.charAt(i-1) == p.charAt(j-1) || p.charAt(j-1) == ‘.’) && dp[i-1][j-1];
}

最终的答案就是 dp[s.length()][p.length()]。

public boolean isMatch(String s, String p) {int m = s.length();int n = p.length();boolean[][] dp = new boolean[m + 1][n + 1];dp[0][0] = true;for (int i = 0; i <= m; i++) {for (int j = 1; j <= n; j++) {if (p.charAt(j - 1) == '*') {dp[i][j] = dp[i][j - 2] || (i > 0 && (s.charAt(i - 1) == p.charAt(j - 2) || p.charAt(j - 2) == '.') && dp[i - 1][j]);} else {dp[i][j] = i > 0 && dp[i - 1][j - 1] && (s.charAt(i - 1) == p.charAt(j - 1) || p.charAt(j - 1) == '.');}}}return dp[m][n];
}

在这里插入图片描述

三、面试经典 150 题-6

数组 / 字符串

3.1 题目

** 轮转数组**

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右轮转 1: [7,1,2,3,4,5,6]
向右轮转 2: [6,7,1,2,3,4,5]
向右轮转 3: [5,6,7,1,2,3,4]
示例 2:输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释: 
向右轮转 1: [99,-1,-100,3]
向右轮转 2: [3,99,-1,-100]提示:1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1
0 <= k <= 105进阶:尽可能想出更多的解决方案,至少有 三种 不同的方法可以解决这个问题。
你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?

3.2 题解

空间复杂度为 O(1)。

解题思路:

这三种方法分别使用了额外数组、环状替换和数组反转来实现数组的右移操作。其中,方法三使用了空间复杂度为 O(1) 的原地算法解决了这个问题。

  1. 对于方法一,我们创建了一个额外的数组来存储旋转后的元素,在最后再将其拷贝回原数组中。这种方法的时间复杂度为 O(n),空间复杂度为 O(n)。
  2. 方法二使用了环状替换的思想,通过多次交换元素来实现数组的右移操作,时间复杂度为 O(n),空间复杂度为 O(1)。
  3. 方法三则使用了数组反转的思想,先将整个数组反转,然后分别反转前 k 个元素和后 n-k 个元素,从而实现数组的右移操作。该方法的时间复杂度为 O(n),空间复杂度为 O(1)。

方法一:使用额外数组

public void rotate(int[] nums, int k) {int n = nums.length;int[] temp = new int[n];for (int i = 0; i < n; i++) {temp[(i + k) % n] = nums[i];}System.arraycopy(temp, 0, nums, 0, n);
}

在这里插入图片描述

方法二:使用环状替换

public void rotate(int[] nums, int k) {int n = nums.length;k = k % n;int count = 0;for (int start = 0; count < n; start++) {int current = start;int prev = nums[start];do {int next = (current + k) % n;int temp = nums[next];nums[next] = prev;prev = temp;current = next;count++;} while (start != current);}
}

在这里插入图片描述

方法三:使用反转数组

public void rotate(int[] nums, int k) {int n = nums.length;k = k % n;reverse(nums, 0, n - 1);reverse(nums, 0, k - 1);reverse(nums, k, n - 1);
}private void reverse(int[] nums, int start, int end) {while (start < end) {int temp = nums[start];nums[start] = nums[end];nums[end] = temp;start++;end--;}
}

在这里插入图片描述

至此,挑战100天 AI In LeetCode Day04(热题+面试经典150题)完成,后续会持续调整;查阅过程中若遇到问题欢迎留言或私信交流。

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

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

相关文章

DDD技术方案落地实践 | 京东云技术团队

1. 引言 从接触领域驱动设计的初学阶段&#xff0c;到实现一个旧系统改造到DDD模型&#xff0c;再到按DDD规范落地的3个的项目。对于领域驱动模型设计研发&#xff0c;从开始的各种疑惑到吸收各种先进的理念&#xff0c;目前在技术实施这一块已经基本比较成熟。在既往经验中总…

输电线路AR可视化巡检降低作业风险

随着现代工业的快速发展&#xff0c;各行业的一线技术工人要处理的问题越来越复杂&#xff0c;一些工作中棘手的问题迫切需要远端专家的协同处理。但远端专家赶来现场往往面临着专家差旅成本高、设备停机损失大、专业支持滞后、突发故障无法立即解决等痛点。传统的远程协助似乎…

MySQL的基本建表及操作

MySQL的基本建表及操作 文章目录 MySQL的基本建表及操作一、表的结构二、建库和建表1.建库2.建表 三、复制表四、查表和删表 一、表的结构 数据库表的结构由表名、列名、列数据类型、列约束和索引等元素组成。具体来说&#xff0c;下面是数据库表的结构元素的详细解释&#xf…

宏观角度认识递归之 Pow(x,n) 问题

50. Pow(x, n) - 力扣&#xff08;LeetCode&#xff09; 计算 x 的 n 次幂&#xff0c;如果是直接暴力求解的话&#xff0c;会造成计算时间周期过长&#xff0c;所以要从别的角度出发&#xff0c;将幂等数分为两个幂等数相乘&#xff0c;例如&#xff1a;三的八次方&#xff0c…

合肥工业大学数字逻辑实验三

** 数字逻辑 实验报告** ✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :hfut实验课设 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!…

生成m3u8视频:批量剪辑与分割的完美结合

在视频处理领域&#xff0c;m3u8视频格式的出现为高效处理和优化视频内容提供了新的可能。尤其在批量剪辑和分割视频的过程中&#xff0c;掌握m3u8视频的生成技巧&#xff0c;意味着更高效的工作流程和更出色的创作效果。现在一起来看看云炫AI智剪如何生成m3u8视频的操作吧。 步…

验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否则&#…

闪客网盘系统源码,已测试对接腾讯COS及本地和支付(支持限速+按时收费+文件分享+可对接易支付)- 修复版

正文概述 资源入口 支持对文件下载限速 对接易支付 推广赚钱啥的功能 源码非常的好 支持腾讯cos 阿里云cos 本地储存 远程存储 源码仅支持服务器搭建 php7.2 伪静态thinkphp 运行目录public 导入数据库 修改config目录下的database.php数据库信息 后台地址&#xff1a; 域名/ad…

Maven中的继承与聚合

一&#xff0c;继承 前面我们将项目拆分成各个小模块&#xff0c;但是每个小模块中有很多相同的依赖于是我们创建一个父工程将模块中相同的依赖定义在父工程中&#xff0c;然后子工程继承父工程Maven作用&#xff1a;简化依赖配置&#xff0c;统一依赖管理,可以实现多重继承像J…

互联网Java工程师面试题·Spring篇·第七弹

目录 36、什么是基于 Java 的 Spring 注解配置? 给一些注解的例子. 37、什么是基于注解的容器配置? 38、怎样开启注解装配&#xff1f; 39、Required 注解 40、Autowired 注解 41、Qualifier 注解 42、在 Spring 框架中如何更有效地使用 JDBC? 43、JdbcTemplate 44…

基于若依的ruoyi-nbcio流程管理系统仿钉钉流程json转bpmn的flowable的xml格式(简单支持发起人与审批人的流程)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 这节简单介绍一下仿钉钉流程json转flowable的xml格式的一个简单例子&#xff0c;目前是测试开发阶段&#…

网络安全与TikTok:年轻一代的数字素养

在数字时代&#xff0c;互联网成为我们生活的重要组成部分&#xff0c;而社交媒体平台则在年轻一代中变得日益流行。其中&#xff0c;TikTok作为一个短视频分享平台&#xff0c;吸引了全球数以亿计的用户&#xff0c;尤其年轻人。 然而&#xff0c;与其快速的普及相伴随的是网…

Java 设计模式——状态模式

目录 1.概述2.结构3.案例实现3.1.抽象状态类3.2.具体状态类3.3.上下文类3.4.测试 4.优缺点5.使用场景 1.概述 【例】通过按钮来控制一个电梯的状态&#xff0c;电梯有开门状态&#xff0c;关门状态&#xff0c;停止状态&#xff0c;运行状态。每一种状态改变&#xff0c;都有可…

【RabbitMQ】 RabbitMQ 消息的延迟 —— 深入探索 RabbitMQ 的死信交换机,消息的 TTL 以及延迟队列

文章目录 一、死信交换机1.1 什么是死信和死信交换机1.2 死信交换机和死信队列的创建方式 二、消息的 TTL2.1 什么是消息的 TTL2.2 基于死信交换机和 TTL 实现消息的延迟 三、基于 DelayExchang 插件实现延迟队列3.1 安装 DelayExchang 插件3.2 DelayExchang 实现消息延迟的原理…

c面向对象编码风格(上)

面向对象和面向过程的基本概念 面向对象和面向过程是两种不同的编程范式&#xff0c;它们在软件开发中用于组织和设计代码的方式。 面向过程编程&#xff08;Procedural Programming&#xff09;是一种以过程&#xff08;函数、方法&#xff09;为核心的编程方式。在面向过程…

[GXYCTF2019]BabySQli1

提示 与平常的sql注入不同这里需要通过php验证账户密码的 错误逻辑 绕过 尝试万能密码 显示是黑客, 这里对or还有和#以及 都测试一下, 看是过滤了哪个 想试试闭合, 结果直接报错弹出来了, 闭合是 这里需要说的是像这种会报错的在真实情况下都是一般不会出现的, 这个是网…

leetcode:26. 删除有序数组中的重复项(python3解法)

难度&#xff1a;简单 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数…

HTML使用canvas绘制海报(网络图片)

生成前&#xff1a; 生成后&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>媒体参会嘉宾邀请函生成链接</title><link rel"stylesheet" href"https://cdn.jsdelivr.net/npm/vant2.10…

大数据毕业设计选题推荐-家具公司运营数据分析平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Docker:自定义镜像

Docker&#xff1a;自定义镜像 1. 自定义镜像2.实际操作 1. 自定义镜像 我们在通过Dockerfile编写之后&#xff0c;可以通过命令来构建镜像。 2.实际操作 首先&#xff0c;我们将课前资料提供的docker-demo.jar包以及Dockerfile拷贝到虚拟机的/root/demo目录&#xff1a; Do…