算法说明

news/2025/3/10 9:52:48/文章来源:https://www.cnblogs.com/hunter9011/p/18761887
  1. 数组与字符串
    ==================================================================================================================
    1.1 两数之和(Two Sum)
    问题描述:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数,返回它们的下标。
    示例:

java
复制
输入:nums = [2, 7, 11, 15], target = 9
输出:[0, 1]
解法:使用哈希表存储已遍历的元素,时间复杂度为 O(n)。

public class TwoSum {
public static int[] twoSum(int[] nums, int target) {
// 创建一个HashMap来存储数组元素及其对应的下标
Map<Integer, Integer> map = new HashMap<>();

    // 遍历数组for (int i = 0; i < nums.length; i++) {int complement = target - nums[i];// 检查HashMap中是否存在与当前元素相加等于目标值的元素if (map.containsKey(complement)) {// 如果存在,返回这两个元素的下标return new int[] { map.get(complement), i };}// 如果不存在,将当前元素及其下标存入HashMapmap.put(nums[i], i);}// 如果没有找到满足条件的两个数,抛出异常throw new IllegalArgumentException("No two sum solution");
}public static void main(String[] args) {int[] nums = {2, 7, 11, 15};int target = 9;int[] result = twoSum(nums, target);System.out.println("Indices: " + result[0] + ", " + result[1]);
}

}

查找数组中两个数的和等于目标值的算法(通常称为 Two Sum 问题)是一个非常经典的算法问题,它在实际编程中有广泛的应用场景。以下是一些常见的业务场景:

  1. 金融领域:投资组合优化
    场景:在股票市场或基金市场中,投资者可能需要找到两只股票或基金,使得它们的价格之和等于某个目标值。

应用:通过该算法,可以快速筛选出符合条件的投资组合,帮助投资者做出决策。

  1. 电商平台:优惠券或满减活动
    场景:在电商平台中,用户可能有两张优惠券,系统需要找到两件商品,使得它们的价格之和等于某个目标值(例如满减活动的门槛)。

应用:通过该算法,可以快速推荐符合条件的商品组合,提升用户体验。

  1. 游戏开发:道具或装备组合
    场景:在游戏中,玩家可能需要找到两件道具或装备,使得它们的属性值之和等于某个目标值(例如合成高级装备的条件)。

应用:通过该算法,可以快速判断玩家是否满足合成条件,并提示玩家如何组合道具。

  1. 数据分析:查找特定关系
    场景:在数据分析中,可能需要找到两个数据点,使得它们的值之和等于某个目标值(例如查找两个用户的消费总额等于某个特定值)。

应用:通过该算法,可以快速筛选出符合条件的数据对,用于进一步分析。

  1. 密码学:哈希碰撞检测
    场景:在密码学中,可能需要找到两个输入,使得它们的哈希值之和等于某个目标值(例如检测哈希碰撞)。

应用:通过该算法,可以快速检测是否存在哈希碰撞,提高密码系统的安全性。

  1. 物流与调度:资源分配
    场景:在物流或资源调度中,可能需要找到两个任务或资源,使得它们的成本或时间之和等于某个目标值。

应用:通过该算法,可以快速找到最优的资源分配方案,提高效率。

  1. 推荐系统:个性化推荐
    场景:在推荐系统中,可能需要找到两个商品或内容,使得它们的评分或权重之和等于某个目标值。

应用:通过该算法,可以为用户推荐更符合其偏好的内容组合。

  1. 数学问题:方程求解
    场景:在数学问题中,可能需要找到两个数,使得它们的和等于某个目标值(例如求解方程
    x

y

t
a
r
g
e
t
x+y=target)。

应用:通过该算法,可以快速求解这类简单的数学问题。

  1. 实时系统:事件匹配
    场景:在实时系统中,可能需要找到两个事件,使得它们的属性值之和等于某个目标值(例如匹配两个传感器的读数)。

应用:通过该算法,可以快速匹配事件,触发相应的操作。

  1. 社交网络:好友推荐
    场景:在社交网络中,可能需要找到两个用户,使得他们的某些属性值之和等于某个目标值(例如兴趣评分之和)。

应用:通过该算法,可以为用户推荐更合适的好友或群组。

1.2 最长无重复字符子串(Longest Substring Without Repeating Characters)
问题描述:给定一个字符串,找出不含有重复字符的最长子串的长度。
输入:s = "abcabcbb"
输出:3("abc")
解法:滑动窗口 + 哈希表,时间复杂度为 O(n)。
2. 链表
2.1 反转链表(Reverse Linked List)
问题描述:反转一个单链表。

示例:
输入:1 -> 2 -> 3 -> 4 -> 5
输出:5 -> 4 -> 3 -> 2 -> 1
解法:迭代或递归实现。

2.2 检测链表是否有环(Linked List Cycle)
问题描述:判断链表中是否有环。

示例:

java
复制
输入:1 -> 2 -> 3 -> 4 -> 2(形成环)
输出:true
解法:快慢指针(Floyd判圈算法),时间复杂度为 O(n)。

  1. 树与图
    3.1 二叉树的最大深度(Maximum Depth of Binary Tree)
    问题描述:计算二叉树的最大深度。

示例:
输入:
3
/
9 20
/
15 7
输出:3
解法:递归或层序遍历(BFS)。

3.2 二叉树的最近公共祖先(Lowest Common Ancestor of a Binary Tree)
问题描述:找到二叉树中两个节点的最近公共祖先。

示例:
输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出:3
解法:递归或路径记录法。

  1. 动态规划
    4.1 最长递增子序列(Longest Increasing Subsequence)
    问题描述:给定一个整数数组,找到最长递增子序列的长度。

示例:
输入:nums = [10, 9, 2, 5, 3, 7, 101, 18]
输出:4([2, 3, 7, 101])
解法:动态规划或二分查找优化,时间复杂度为 O(n log n)。

4.2 零钱兑换(Coin Change)
问题描述:给定不同面额的硬币和一个总金额,计算凑成总金额所需的最少硬币数。

示例:
输入:coins = [1, 2, 5], amount = 11
输出:3(5 + 5 + 1)
解法:动态规划,时间复杂度为 O(n * m),其中 n 是金额,m 是硬币种类数。

public static int coinChange(int[] coins, int amount) {// 初始化 dp 数组int[] dp = new int[amount + 1];Arrays.fill(dp, amount + 1); // 初始化为无穷大dp[0] = 0; // 金额为 0 时不需要硬币// 动态规划填充 dp 数组for (int i = 1; i <= amount; i++) {for (int coin : coins) {if (coin <= i) {dp[i] = Math.min(dp[i], dp[i - coin] + 1);}}}// 返回结果return dp[amount] > amount ? -1 : dp[amount];
}
  1. 回溯与搜索
    5.1 全排列(Permutations)
    问题描述:给定一个不含重复数字的数组,返回所有可能的全排列。

示例:

java
复制
输入:nums = [1, 2, 3]
输出:[[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]
解法:回溯算法。

5.2 组合总和(Combination Sum)
问题描述:给定一个无重复元素的数组和一个目标数,找出数组中所有可以使数字和为目标的组合。

示例:

输入:candidates = [2, 3, 6, 7], target = 7
输出:[[2, 2, 3], [7]]
解法:回溯算法。

  1. 堆与优先队列
    6.1 数组中的第K个最大元素(Kth Largest Element in an Array)
    问题描述:在未排序的数组中找到第 k 个最大的元素。

示例:

java
复制
输入:nums = [3, 2, 1, 5, 6, 4], k = 2
输出:5
解法:快速选择算法或最小堆,时间复杂度为 O(n) 或 O(n log k)。

  1. 其他经典问题
    7.1 LRU缓存(LRU Cache)
    问题描述:设计并实现一个 LRU(最近最少使用)缓存机制。

解法:哈希表 + 双向链表。

7.2 接雨水(Trapping Rain Water)
问题描述:给定 n 个非负整数表示高度图,计算按此排列的柱子能接多少雨水。

示例:

java
复制
输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解法:双指针或动态规划。

总结
以上问题涵盖了数组、字符串、链表、树、动态规划、回溯、堆等常见算法和数据结构。在准备面试时,建议:

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

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

相关文章

Xshell 8软件下载与安装教程

1、安装包 扫描下方二维码关注「软知社」,后台回复【057】三位数字即可免费获取分享链接,无广告拒绝套路; 2、安装教程(建议关闭杀毒软件与本地防护设置)双击Xshell-8.0.0055r.exe安装,弹窗安装对话框点击下一步选择‘我接受。。’,点击下一步选择安装目录D盘,点击下一步…

(附体验地址)大模型知识引擎:AI 助手能否助力销售技能提升?

体验地址:https://lke.cloud.tencent.com/webim_exp/#/chat/FAIMcM 腾讯云的大模型知识引擎本身定位于为企业客户及合作伙伴提供服务,因此我在探索如何最佳利用其现有功能与特点时,专注于实际应用场景的挖掘。为此,今天我搭建出了一个卖车销售话术练习助手,旨在帮助销售人…

Hyper V高级用法:优化虚拟机性能策略

在利用Hyper-V进行虚拟化部署时,优化虚拟机性能是至关重要的,这涉及到多个方面的策略和配置。以下是一些高级用法和优化策略,旨在提升虚拟机的整体性能和资源利用率:一、硬件配置优化 启用硬件虚拟化: 确保主机的CPU支持硬件虚拟化技术(如Intel VT-x或AMD-V),并在BIOS/…

Windbg初见

下载与安装在微软商店中找到Windbg即可。 这里是拼网速的时间,校园网可能有帮助。在等下载的这段时间里面我也看了一些博客,大概了解了一下windbg的用法。 不过怎么说还是得在虚拟机也下载一个,总是不能在实体机调试的。在Layout里面修改为Disassembly,这下有点od的样子了。…

No.40 JavaScript---防抖(debounce)、节流(throttle)

一、防抖 1.含义防抖严格算起来应该属于性能优化的知识,但实际上遇到的频率相当高,处理不当或者放任不管就容易引起浏览器卡死。2.从滚动条监听的例子说起<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><me…

IDEA 必备插件!轻松搞定 JSON 格式化!

Json Assistant —— 基于 IntelliJ IDEs 的 JSON 工具插件,支持 IntelliJ IDEA、DataGrip、PyCharm Professional、WebStorm 等常用的 IDE 工具!大家好,我是 Java陈序员。 在日常开发中,常常会遇到 JSON 数据的处理,可以借助一些在线 JSON 工具网站,进行处理。 但是,经…

绩效考核的优势

来源:tita.com 绩效评估是对员工绩效的系统评估,旨在了解一个人进一步成长和发展的能力。绩效评估通常以系统的方式进行,如下所示:主管人员衡量员工的薪酬,并将其与目标和计划进行比较。 主管分析员工工作绩效背后的因素。 雇主可以指导员工取得更好的业绩。绩效考核目标 …

Spring AI与DeepSeek实战二:打造企业级智能体

一、概述 智能体 Agent 能自主执行任务实现特定目标的 AI 程序。传统 AI(如ChatGPT一、概述 智能体 Agent 能自主执行任务实现特定目标的 AI 程序。传统 AI(如ChatGPT)主要依靠用户输入指令,而智能体 Agent 可以自主思考、决策,并执行复杂任务,就像一个AI助手,能够独立完…

Vulnhub-Node

利用信息收集拿到路径得到账户密码,下载备份文件,base64解密后,利用fcrackzip爆破zip压缩包,得到一个文件,查看app.js,发现泄露的账户密码,连接ssh,成功连接,利用ubuntu历史版本漏洞提权 一、靶机搭建 选择扫描虚拟机选择路径即可开启靶机二、信息收集 靶机信息 name:…

[AIGC/Agent] MCP:模型上下文协议

引言火爆 AI 编程圈的 MCP 到底是个什么东西?最近,如果你经常使用 AI 编程的话,肯定听到过 MCP 这个概念 那到底什么是 MCP 呢?MCP 定义先从专业角度讲,MCP 就是Anthropic(Claude) 主导发布的一个开放的、通用的、有共识的协议标准。 Model Context Protocol(MCP)MCP 功能…

飞驰云联荣获“2024年度十大信创安全品牌”第三名!

日前,由安东工作室携手北京信息灾备技术产业联盟信创工委会联合举办的“第二届年度十大信创品牌评选活动”榜单出炉,Ftrans飞驰云联凭借自主创新的技术实力、显著的行业信创成果等多项优势,荣获“2024年度十大信创安全品牌”第三名!在信创领域,Ftrans飞驰云联的核心技术自…

【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理

在 AI 编程领域国内外有一堆能叫的上号的应用:CursorWindsurfTrae阿里的「通义灵码」百度的「文心快码」字节跳动的「MarsCode」科大讯飞的「iFlyCode」GitHub 的「Copilot」等等等...这么多的 AI 编程应用,它们到底有什么区别? 这些编程应用的实现原理到底是什么样的? 如果…