2025高频面试算法总结篇【持续更新中】

文章目录

  • 递归&回溯
    • 131. 分割回文串
    • 面试题 08.12. 八皇后
  • 动态规划
    • 72编辑距离
    • 5. 最长回文子串
    • 279. 完全平方数
    • 300. 最长递增子序列


递归&回溯

131. 分割回文串

在这里插入图片描述
回溯思路:

临界条件:
if (start == s.length) => 保存
循环遍历这个字串
for (int i = start;i < s.length();i++)if (s[start:i] 是 回文串) => dfs(i+1)

回文串的判断:

  1. 可以直接判断。
  2. 可以采用动态规划的方式进行记录,dp[i][j]定义为s[i:j]字串是否是回文串,d[i][j] = s[i]==s[j] && d[i+1][j-1]
class Solution {List<List<String>> ans = new ArrayList<>();public List<List<String>> partition(String s) {if (s == null || s.length() == 0) {return ans;}dfs(s, 0, new ArrayList<>());return ans;}private void dfs (String s, int start, List<String> res) {if (start == s.length()) {ans.add(new ArrayList<>(res));return;}for (int i = start; i < s.length(); i++) {if (huiwen(s.substring(start, i+1))) {res.add(s.substring(start, i+1));dfs(s, i+1, res);res.remove(res.size() - 1);}}}private boolean huiwen(String substring) {int left = 0;int right = substring.length() -1;while (left < right) {if (substring.charAt(left) != substring.charAt(right)) {return false;}left++;right--;}return true;}}

面试题 08.12. 八皇后

在这里插入图片描述
回溯思路:定义一个一维数组即可cols[row] = x,第row行的皇后在第x列。

临界条件:
if (row == N) =》保存
递归&回溯:遍历当前这一行的数据
for (int col = 0; col < N; col++)if [row][col] 符合 题意 :=》下一行dfs(row+1)

[row][col] 符合 题意:

  1. 不同行已经确保了,需要判断不同列:cols[0:row] != col
  2. 对角线的判断:row - col == i - cols[i](左对角线冲突)& row + col == i + cols[i](右对角线冲突)【简单记忆:绝对值:行-遍历的行==列-遍历的列Math.abs(row - i) == Math.abs(col - cols[i])
class Solution {List<List<String>> ans = new ArrayList<>();public List<List<String>> solveNQueens(int n) {if (n == 0) return ans;dfs(0, n, new int[n]);return ans;}private void dfs(int row,int n, int[] cols) {if (row == n) {// 保存ans.add(board(cols));return;}for (int col = 0; col < n; col++) {if (helper(row, col, cols)) {cols[row] = col;dfs(row+1, n, cols);cols[row] = 0;}}}private boolean helper(int row,int col,int[] cols) {if (row == 0) return true;for (int i = 0; i < row; i++) {if (cols[i] == col|| Math.abs(row - i) == Math.abs(col - cols[i])) {return false;}}return true;}private List<String> board (int[] cols) {List<String> res = new ArrayList<>();char[] s = new char[cols.length];for (int i = 0; i < cols.length; i++) {Arrays.fill(s, '.');s[cols[i]] = 'Q';res.add(new String(s));}return res;} }

动态规划

72编辑距离

在这里插入图片描述
定义:dp[i][j]表示word1[0:i]编辑成word2[0:j]所使用的最少操作数 。
公式:初始 i=0 dp[0][j] = j , j=0, dp[i][j] = i if s[i] == s[j] dp[i][j] = dp[i-1][j-1] else dp[i][j] = 1+ Math.min(插入dp[i][j-1],删除dp[i-1][j], 替换 dp[i-1][j-1])

class Solution {// 定义// dp[i][j]:  word1[0:i] 转换成 word2[0:j] 所使用的最少操作数// 边界// d[0][0] = 0// d[i][0] = i d[0][j] = j// 状态转移// dp[i][j] =// if w1[i] == w2[j] => dp[i][j] = dp[i-1][j-1]// else 删插换 dp[i][j] = 1 + min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])public int minDistance(String word1, String word2) {int[][] dp = new int[word1.length() + 1][word2.length() + 1];for (int i = 0; i <= word1.length(); i++) {dp[i][0] = i;}for (int j = 0; j <= word2.length(); j++) {dp[0][j] = j;}for (int i = 1; i <= word1.length(); i++) {for (int j = 1; j <= word2.length(); j++) {if (word1.charAt(i - 1) == word2.charAt(j - 1)) {dp[i][j] = dp[i - 1][j - 1];}else {dp[i][j] = Math.min(Math.min(dp[i - 1][j], dp[i][j - 1]), dp[i-1][j-1]) + 1;}}}return dp[word1.length()][word2.length()];}
}

5. 最长回文子串

在这里插入图片描述
定义:dp[i][j] 表示 s[i:j]是否是回文串
公式:dp[i][i] = true 单个字符一定是回文串,dp[i][j] = (s[i] == s[j]) && (len == 2 || dp[i + 1][j - 1])

class Solution {public String longestPalindrome(String s) {boolean[][] dp = new boolean[s.length()][s.length()];for (int i = 0; i < s.length(); i++) {dp[i][i] = true;}int start = 0;int maxLen = 1;for (int len = 2; len <= s.length(); len++) {for (int i = 0; i <= s.length() - len; i++) {int j = i + len - 1;if (s.charAt(i) == s.charAt(j)) {if (len == 2) {dp[i][j] = true;}else {dp[i][j] = dp[i + 1][j - 1];}}if (dp[i][j] && maxLen < len) {maxLen = len;start = i;}}}return s.substring(start, start + maxLen);}
}

279. 完全平方数

在这里插入图片描述
定义:dp[i] 和为 i 的完全平方数的最少数量 。
公式: dp[0]=0 dp[i]=Math.min(dp[i], dp[i-j*j]+1)

class Solution {public int numSquares(int n) {int[] dp = new int[n+1];Arrays.fill(dp, Integer.MAX_VALUE);dp[0] = 0;for (int i = 1; i <= n; i++) {for (int j = 1; j*j <= i;j++) {dp[i] = Math.min(dp[i], dp[i-j*j]+1);}}return dp[n];}
}

300. 最长递增子序列

在这里插入图片描述
定义:dp[i] 表示以nums[i]结尾的最长递增子序列的长度。
公式:dp[i]=max(dp[i],dp[j]+1)(其中 j<i 且 nums[j]<nums[i])

class Solution {public int lengthOfLIS(int[] nums) {if (nums == null || nums.length == 0) {return 0;}// dp[i] = dp[i-x] + 1int[] dp = new int[nums.length + 1];Arrays.fill(dp, 1);for (int i = 1; i < nums.length; i++) {for (int j = 0; j < i; j++) {if (nums[i] > nums[j]) {dp[i] = Math.max(dp[i], dp[j] + 1);}}if (dp[i] > dp[nums.length]) {dp[nums.length] = dp[i];}}return dp[nums.length];}
}

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

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

相关文章

【大模型学习】第二十二章 什么是对抗生成网络

目录 一、背景介绍 二、生活化例子说明什么是对抗生成网络 三、技术细节详解 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;训练机制 &#xff08;三&#xff09;损失函数 一、背景介绍 对抗生成网络&#xff08;Generative Adversarial Networks, GANs…

摄像头模块ISP处理流程

摄像头模块的ISP&#xff08;图像信号处理器&#xff09;处理流程是对图像传感器输出的原始信号进行系统性优化的过程&#xff0c;主要分为以下关键步骤及对应功能模块&#xff1a; 一、原始信号输入与预处理 ‌传感器信号捕获‌ CMOS/CCD传感器将光信号转换为模拟电信号&…

linux系统安装和激活conda

安装 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shbash ./Miniconda3-latest-Linux-x86_64.sh回车到最后按照输入yes&#xff0c;之后按提示操作。 激活 conda activate如果没有反应或者返回&#xff1a; bash: conda: command not found则…

(全)2024下半年真题 系统架构设计师 综合知识 答案解析02

系统架构设计师第二版教程VIP课程https://edu.csdn.net/course/detail/40283 面向对象技术 在UML用例图中&#xff0c;参与者之间存在 关系。 A. 聚合 B. 包含 C. 继承 D. 扩展 答案&#xff1a;C 解析&#xff1a;用例图描述了一组用例、参与者以及它们之间的关系…

【学习笔记】《逆向工程核心原理》03.abex‘crackme-2、函数的调用约定、视频讲座-Tut.ReverseMe1

文章目录 abexcrackme-21. Visual Basic文件的特征1.1. VB专用引擎1.2. 本地代码与伪代码1.3. 事件处理程序1.4. 未文档化的结构体 2. 开始调试2.1. 间接调用2.2. RT_MainStruct结构体2.3. ThunRTMain()函数 3. 分析crackme3.1. 检索字符串3.2. 查找字符串地址3.3. 生成Serial的…

深入解析Go语言Channel:源码剖析与并发读写机制

文章目录 Channel的内部结构Channel的创建过程有缓冲Channel的并发读写机制同时读写的可能性发送操作的实现接收操作的实现 并发读写的核心机制解析互斥锁保护环形缓冲区等待队列直接传递优化Goroutine调度 实例分析&#xff1a;有缓冲Channel的并发读写性能优化与最佳实践缓冲…

初识Linux(14)Ext系列⽂件系统

之前谈论的都是已打开文件在操作系统的中的管理&#xff0c;但是还有更多的文件没有被打开&#xff0c;被存在磁盘中&#xff0c;如何管理这些磁盘中的文件&#xff0c;就是本篇的学习目标。 目录 1.理解硬件 磁盘结构 扇区的读写 CHS地址定位 磁盘的逻辑结构 2. 引⼊⽂件…

电机控制常见面试问题(十二)

文章目录 一.电机锁相环1.理解锁相环2.电机控制中的锁相环应用3.数字锁相环&#xff08;DPLL&#xff09; vs 模拟锁相环&#xff08;APLL&#xff09;4.锁相环设计的关键技术挑战5.总结 二、磁链观测1.什么是磁链&#xff1f;2.为什么要观测磁链&#xff1f;3.怎么观测磁链&am…

Android `%d` 与 `1$%d` 格式化的区别

在 Android 开发中&#xff0c;我们经常需要对字符串进行格式化处理&#xff0c;比如动态填充数字、日期、字符等。 其中&#xff0c;%d 和 1$%d 都是格式化占位符&#xff0c;但它们在使用上有一些不同。 本文将详细解析这两者的区别&#xff0c;并结合 Kotlin 代码示例帮助你…

SpringBoot中使用kaptcha生成验证码

简介 kaptcha是谷歌开源的简单实用的验证码生成工具。通过设置参数&#xff0c;可以自定义验证码大小、颜色、显示的字符等等。 Maven引入依赖 <!-- https://mvnrepository.com/artifact/pro.fessional/kaptcha --><dependency><groupId>pro.fessional<…

如何在PHP中实现数据加密与解密:保护敏感信息

如何在PHP中实现数据加密与解密&#xff1a;保护敏感信息 在现代Web开发中&#xff0c;数据安全是一个至关重要的议题。无论是用户的个人信息、支付数据&#xff0c;还是其他敏感信息&#xff0c;都需要在存储和传输过程中进行加密&#xff0c;以防止数据泄露和恶意攻击。PHP作…

单元测试、系统测试、集成测试、回归测试的步骤、优点、缺点、注意点梳理说明

单元测试、系统测试、集成测试、回归测试的梳理说明 单元测试 步骤&#xff1a; 编写测试用例&#xff0c;覆盖代码的各个分支和边界条件。使用测试框架&#xff08;如JUnit、NUnit&#xff09;执行测试。检查测试结果&#xff0c;确保代码按预期运行。修复发现的缺陷并重新测…

C++能力测试题

以下是一些C能力测试题&#xff0c;涵盖了从基础语法到高级特性的多个方面&#xff1a; 选择题 1. 下面关于RTTI的说法&#xff0c;正确的是&#xff1f; A. 使用typeid前必须包含<type_info>头文件。 B. typeid只能用于多态类型或表达式。 C. typeid可以用于不完整类型…

模拟类似 DeepSeek 的对话

以下是一个完整的 JavaScript 数据流式获取实现方案&#xff0c;模拟类似 DeepSeek 的对话式逐段返回效果。包含前端实现、后端模拟和详细注释&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><titl…

【训练细节解读】文本智能混合分块(Mixtures of Text Chunking,MoC)引领RAG进入多粒度感知智能分块阶段

RAG系统在处理复杂上下文时,传统和语义分块方法的局限性,文本分块的质量限制了检索到的内容,从而影响生成答案的准确性。尽管其他算法组件有所进步,但分块策略中的增量缺陷仍可能在一定程度上降低整体系统性能。如何直接量化分块质量?如何有效利用大型语言模型(LLMs)进行…

IMA+DeepSeekR1+本地知识库撰写NOIP2008普及组T3【传球游戏】题解

目录 一、提问词 二、DeepSeekR1回复 题目描述 解题思路 实现代码 代码说明 三、说明 【IMADeepSeekR1本地知识库】撰写NOIP2008普及组复赛题解系列 1、IMADeepSeekR1本地知识库撰写NOIP2008普及组T1【ISBN 号码】题解-CSDN博客 2、IMADeepSeekR1本地知识库撰写NOIP200…

Nginx正向代理HTTPS配置指南(仅供参考)

要使用Nginx作为正向代理访问HTTPS网站&#xff0c;需通过CONNECT方法建立隧道。以下是操作详细步骤&#xff1a; 1. 安装Nginx及依赖模块 需要模块&#xff1a;ngx_http_proxy_connect_module&#xff08;支持CONNECT方法&#xff09;。 安装方式&#xff1a;需重新编译Nginx…

Python 实现机器学习的 房价预测回归项目

项目目标&#xff1a; 基于房屋特征&#xff08;如房间数、地理位置等&#xff09;预测加州地区的房价中位数。 使用 Python 实现机器学习的 房价预测回归项目&#xff08;使用 California Housing 数据集&#xff09; 环境准备 # 安装必要库&#xff08;若未安装&#xff09…

聚力·突破·共赢|修饰组学服务联盟正式成立,共启协同发展新篇章

2025年3月13日&#xff0c;上海——由中科新生命、杭州微米生物、广科安德、承启生物、派森诺生物、胡珀生物等十余家行业标杆企业共同发起的“修饰组学服务联盟”成立仪式在上海紫竹新兴产业技术研究院隆重举行。联盟以“聚力突破共赢”为主题&#xff0c;致力于整合修饰组学全…

【Docker项目实战】使用Docker部署serverMmon青蛇探针(详细教程)

【Docker项目实战】使用Docker部署serverMmon青蛇探针 一、serverMmon介绍1.1 serverMmon 简介1.2 主要特点二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载serverMmon镜像五、…