题目列表

  1. 70. 爬楼梯 简单难度 leetcode链接

  2. 118. 杨辉三角 简单难度 leetcode链接

  3. 198. 打家劫舍 中等难度 leetcode链接

  4. 279.完全平方数 中等难度 leetcode链接

  5. 322.零钱兑换 中等难度 leetcode链接

  6. 139.单词拆分 中等难度 leetcode链接

  7. 300.最长递增子序列 中等难度 leetcode链接

  8. 152.乘积最大子数组 中等难度 leetcode链接

  9. 416.分割等和子集 中等难度 leetcode链接

  10. 32.最长有效括号 困难难度 leetcode链接

题目

(1)爬楼梯

题目

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:

输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶

示例 2:

输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶

提示:

  • 1 <= n <= 45

思路

class Solution:def climbStairs(self, n: int) -> int:if n <= 1:return n        dp = [0] * 3dp[1] = 1dp[2] = 2        for i in range(3, n + 1):total = dp[1] + dp[2]dp[1] = dp[2]dp[2] = total        return dp[2]

(2)杨辉三角

题目

给定一个非负整数 numRows生成「杨辉三角」的前 numRows 行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

示例 1:

输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

示例 2:

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

提示:

  • 1 <= numRows <= 30

思路

# 时间复杂度:O(numRows^2)。
# 空间复杂度:O(1)。返回值不计入。
class Solution:def generate(self, numRows: int) -> List[List[int]]:c = [[1] * (i + 1) for i in range(numRows)]for i in range(2, numRows):for j in range(1, i):# 左上方的数 + 正上方的数c[i][j] = c[i - 1][j - 1] + c[i - 1][j]return c

(3)打家劫舍

题目

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下 一夜之内能够偷窃到的最高金额。

示例 1:

输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。

示例 2:

输入:[2,7,9,3,1] 输出:12 解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。 偷窃到的最高金额 = 2 + 9 + 1 = 12 。

提示:

  • 1 <= nums.length <= 100

  • 0 <= nums[i] <= 400

思路

class Solution:def rob(self, nums: List[int]) -> int:if len(nums) == 0:  # 如果没有房屋,返回0return 0if len(nums) == 1:  # 如果只有一个房屋,返回其金额return nums[0]# 创建一个动态规划数组,用于存储最大金额dp = [0] * len(nums)dp[0] = nums[0]  # 将dp的第一个元素设置为第一个房屋的金额dp[1] = max(nums[0], nums[1])  # 将dp的第二个元素设置为第一二个房屋中的金额较大者# 遍历剩余的房屋for i in range(2, len(nums)):# 对于每个房屋,选择抢劫当前房屋和抢劫前一个房屋的最大金额dp[i] = max(dp[i - 2] + nums[i], dp[i - 1])return dp[-1]  # 返回最后一个房屋中可抢劫的最大金额

(4)完全平方数

题目

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量

完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,14916 都是完全平方数,而 311 不是。

示例 1:

输入:n = 12输出:3 解释:12 = 4 + 4 + 4

示例 2:

输入:n = 13输出:2 解释:13 = 4 + 9

提示:

  • 1 <= n <= 10(4)

思路

# 完全背包问题
# 时间复杂度:O(N*sqrt(N))。其中 N=10^4。
#空间复杂度:O(N)。
N = 10000
f = [0] + [inf] * N
for i in range(1, isqrt(N) + 1):for j in range(i * i, N + 1):f[j] = min(f[j], f[j - i * i] + 1)  # 不选 vs 选class Solution:def numSquares(self, n: int) -> int:return f[n]

(5)零钱兑换

题目

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。

计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1

你可以认为每种硬币的数量是无限的。

示例 1:

输入:coins = [1, 2, 5], amount = 11输出:3 解释:11 = 5 + 5 + 1

示例 2:

输入:coins = [2], amount = 3输出:-1

示例 3:

输入:coins = [1], amount = 0 输出:0

提示:

  • 1 <= coins.length <= 12

  • 1 <= coins[i] <= 2(31) - 1

  • 0 <= amount <= 10(4)

思路

类似于(4)的“完全平方数”求解

# 完全背包问题
# 时间复杂度:O(n⋅amount),其中 n 为 coins 的长度。
# 空间复杂度:O(amount)。
class Solution:def coinChange(self, coins: List[int], amount: int) -> int:f = [0] + [inf] * amountfor x in coins:for c in range(x, amount + 1):f[c] = min(f[c], f[c - x] + 1)ans = f[amount]return ans if ans < inf else -1
# 链接:https://leetcode.cn/problems/coin-change/solutions/2119065/jiao-ni-yi-bu-bu-si-kao-dong-tai-gui-hua-21m5/

(6)单词拆分

题目

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true

注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

示例 1:

输入: s = "leetcode", wordDict = ["leet", "code"] 输出: true 解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。

示例 2:

输入: s = "applepenapple", wordDict = ["apple", "pen"] 输出: true 解释: 返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。 注意,你可以重复使用字典中的单词。

示例 3:

输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"] 输出: false

提示:

  • 1 <= s.length <= 300

  • 1 <= wordDict.length <= 1000

  • 1 <= wordDict[i].length <= 20

  • swordDict[i] 仅由小写英文字母组成

  • wordDict 中的所有字符串 互不相同

思路

# 时间复杂度:O(n^2)
# 空间复杂度:O(n)
class Solution:def wordBreak(self, s: str, wordDict: List[str]) -> bool:       n=len(s)dp=[False]*(n+1)dp[0]=Truefor i in range(n):for j in range(i+1,n+1):if(dp[i] and (s[i:j] in wordDict)):dp[j]=Truereturn dp[-1]

(7)最长递增子序列

题目

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

示例 1:

输入:nums = [10,9,2,5,3,7,101,18] 输出:4 解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。

示例 2:

输入:nums = [0,1,0,3,2,3] 输出:4

示例 3:

输入:nums = [7,7,7,7,7,7,7] 输出:1

提示:

  • 1 <= nums.length <= 2500

  • -10(4) <= nums[i] <= 10(4)

思路

class Solution:def lengthOfLIS(self, nums: List[int]) -> int:if len(nums) <= 1:return len(nums)dp = [1] * len(nums)result = 1for i in range(1, len(nums)):for j in range(0, i):if nums[i] > nums[j]:dp[i] = max(dp[i], dp[j] + 1)result = max(result, dp[i]) #取长的子序列return result

(8)乘积最大子数组

题目

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续 子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

测试用例的答案是一个 32-位 整数。

示例 1:

输入: nums = [2,3,-2,4] 输出: 6解释: 子数组 [2,3] 有最大乘积 6。

示例 2:

输入: nums = [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组

提示:

  • 1 <= nums.length <= 2 * 10(4)

  • -10 <= nums[i] <= 10

  • nums 的任何子数组的乘积都 保证 是一个 32-位 整数

思路

# 动态规划
class Solution:def maxProduct(self, nums: List[int]) -> int:if not nums: return res = nums[0]pre_max = nums[0]pre_min = nums[0]for num in nums[1:]:cur_max = max(pre_max * num, pre_min * num, num)cur_min = min(pre_max * num, pre_min * num, num)res = max(res, cur_max)pre_max = cur_maxpre_min = cur_minreturn res

(9)分割等和子集

题目

给你一个 只包含正整数 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

示例 1:

输入:nums = [1,5,11,5] 输出:true 解释:数组可以分割成 [1, 5, 5] 和 [11] 。

示例 2:

输入:nums = [1,2,3,5] 输出:false 解释:数组不能分割成两个元素和相等的子集。

提示:

  • 1 <= nums.length <= 200

  • 1 <= nums[i] <= 100

思路

class Solution:def canPartition(self, nums: List[int]) -> bool:_sum = 0# dp[i]中的i表示背包内总和# 题目中说:每个数组中的元素不会超过 100,数组的大小不会超过 200# 总和不会大于20000,背包最大只需要其中一半,所以10001大小就可以了dp = [0] * 10001for num in nums:_sum += num# 也可以使用内置函数一步求和# _sum = sum(nums)if _sum % 2 == 1:return Falsetarget = _sum // 2# 开始 0-1背包for num in nums:for j in range(target, num - 1, -1):  # 每一个元素一定是不可重复放入,所以从大到小遍历dp[j] = max(dp[j], dp[j - num] + num)# 集合中的元素正好可以凑成总和targetif dp[target] == target:return Truereturn False

(10)最长有效括号

题目

给你一个只包含 '('')' 的字符串,找出最长有效(格式正确且连续)括号 子串 的长度。

左右括号匹配,即每个左括号都有对应的右括号将其闭合的字符串是格式正确的,比如 "(()())"

示例 1:

输入:s = "(()" 输出:2 解释:最长有效括号子串是 "()"

示例 2:

输入:s = ")()())" 输出:4 解释:最长有效括号子串是 "()()"

示例 3:

输入:s = "" 输出:0

提示:

  • 0 <= s.length <= 3 * 10(4)

  • s[i]'('')'

思路

# 时间复杂度: 每个字符最多入栈,出栈各一次。再加上统计1的个数,最多为 O(3n)
# 空间复杂度: O(n)
class Solution:def longestValidParentheses(self, s: str) -> int:stack=[]maxL=0n=len(s)tmp=[0]*n         #标记数组cur=0for i in range(n):if s[i]=='(':stack.append(i)else:if stack:j=stack.pop()tmp[i],tmp[j]=1,1      #匹配成功时标记    for num in tmp:    #计算连续1出现的最大次数if num:cur+=1else:          #遇到0时中断,进行对比,并重置maxL=max(cur,maxL)  cur=0maxL=max(cur,maxL) #最后一次统计可能未终断,多做一次对比return maxL

结尾

亲爱的读者朋友:感谢您在繁忙中驻足阅读本期内容!您的到来是对我们最大的支持❤️

正如古语所言:"当局者迷,旁观者清"。您独到的见解与客观评价,恰似一盏明灯💡,能帮助我们照亮内容盲区,让未来的创作更加贴近您的需求。

若此文给您带来启发或收获,不妨通过以下方式为彼此搭建一座桥梁: ✨ 点击右上角【点赞】图标,让好内容被更多人看见 ✨ 滑动屏幕【收藏】本篇,便于随时查阅回味 ✨ 在评论区留下您的真知灼见,让我们共同碰撞思维的火花

我始终秉持匠心精神,以键盘为犁铧深耕知识沃土💻,用每一次敲击传递专业价值,不断优化内容呈现形式,力求为您打造沉浸式的阅读盛宴📚。

有任何疑问或建议?评论区就是我们的连心桥!您的每一条留言我都将认真研读,并在24小时内回复解答📝。

愿我们携手同行,在知识的雨林中茁壮成长🌳,共享思想绽放的甘甜果实。下期相遇时,期待看到您智慧的评论与闪亮的点赞身影✨!

万分感谢🙏🙏您的点赞👍👍、收藏⭐🌟、评论💬🗯️、关注❤️💚


自我介绍:一线互联网大厂资深算法研发(工作6年+),4年以上招聘面试官经验(一二面面试官,面试候选人400+),深谙岗位专业知识、技能雷达图,已累计辅导15+求职者顺利入职大中型互联网公司。熟练掌握大模型、NLP、搜索、推荐、数据挖掘算法和优化,提供面试辅导、专业知识入门到进阶辅导等定制化需求等服务,助力您顺利完成学习和求职之旅(有需要者可私信联系) 

友友们,自己的知乎账号为“快乐星球”,定期更新技术文章,敬请关注!

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

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

相关文章

数巅中标中建科技AI知识库项目,开启建筑业数智化新篇章

AI正以前所未有的迅猛态势渗透进建筑业的每一处脉络。在这场数智化转型浪潮中&#xff0c;AI技术如何与建筑业基因深度融合&#xff1f;如何充分释放数据价值&#xff1f;近日&#xff0c;数巅成功中标中建科技集团有限公司“企业AI知识库研发”项目&#xff0c;这一“大语言模…

想要PDF翻译保留格式?用对工具是关键

嘿&#xff0c;朋友&#xff01;最近有没有被PDF翻译的事儿搞得焦头烂额呀&#xff1f;尤其是碰到韩文PDF文件的时候&#xff0c;是不是更头疼了&#xff1f;别担心&#xff0c;我最近也遇到了类似的问题&#xff0c;试了不少软件&#xff0c;发现有五款软件在处理韩文PDF翻译时…

【MySQL✨】服务器安装 MySQL 及配置相关操作

1. 安装 MySQL 在安装 MySQL 时&#xff0c;如果使用官方 RPM 源&#xff0c;会遇到 GPG 密钥验证失败的错误&#xff0c;可以按照以下步骤解决&#xff1a; 解决 GPG 密钥验证失败的问题下载 MySQL 官方 GPG 密钥 使用以下命令下载并安装 MySQL 的官方 GPG 密钥&#xff1a; w…

大数据量返回方案(非分页)

一、普通方式返回100万条数据RestController RequestMapping("/bad") public class BadController {Autowiredprivate UserRepository userRepository;/*** 危险&#xff01;一次性加载 100 万条到内存*/GetMapping("/all-users")public List<User> …

基于Casbin的微服务细粒度权限控制方案对比与实践

基于Casbin的微服务细粒度权限控制方案对比与实践 随着微服务架构在互联网和企业级应用中的广泛应用&#xff0c;服务间的安全边界愈发重要。传统的集中式权限控制方式已难以满足微服务的高并发、动态扩展和多语言支持等需求。本文将从主流的三种微服务权限控制方案入手&#x…

5G毫米波现状概述(截止2025 年7月)

5G毫米波现状概述(截止2025 年7月&#xff09; 原创 modem协议笔记 2025年07月25日 06:01 广东 听全文 当你在体育馆看球赛时&#xff0c;想发段实时视频到朋友圈却总卡成PPT&#xff1b;当郊区的父母抱怨“光纤拉不到家&#xff0c;网速比蜗牛慢”—这些场景背后&#xff…

thymeleaf 日期格式化显示

在Thymeleaf中处理日期格式化显示主要有以下几种方式&#xff1a; 1. 使用#dates.format()方法进行基础格式化&#xff1a; <p th:text"${#dates.format(dateObj, yyyy-MM-dd HH:mm:ss)}"></p>这种方法支持自定义格式模式&#xff0c;如yyyy表示年份、MM…

【经验分享】如何在Vscode的Jupyter Notebook中设置默认显示行号

【经验分享】如何在Vscode的Jupyter Notebook中设置默认显示行号 打开设置&#xff0c;搜索&#xff1a;Notebook: Line Number&#xff0c;然后把这个设置为on

蓝桥杯STL stack

STL stack 概述栈&#xff08;stack&#xff09;是一种遵循**后进先出&#xff08;LIFO&#xff09;**原则的线性数据结构&#xff0c;仅允许在栈顶进行插入和删除操作。STL&#xff08;Standard Template Library&#xff09;中的 stack 是一个容器适配器&#xff0c;基于其他…

从0到1:飞算JavaAI如何用AI魔法重构MCP服务全生命周期?

摘要 本文详细介绍了如何利用飞算JavaAI技术实现MCP&#xff08;Model Context Protocol&#xff09;服务的创建及通过的全过程。首先阐述了飞算JavaAI的基本概念、特点和优势&#xff0c;接着对MCP服务的需求进行分析&#xff0c;然后按照软件开发流程&#xff0c;从系统设计、…

Webpack Loader 完全指南:从原理到配置的深度解析

掌握 Webpack Loader 的核心机制&#xff0c;解锁前端工程化进阶技能前言&#xff1a;为什么需要理解 Loader&#xff1f; 在现代前端工程化体系中&#xff0c;Webpack 已成为构建工具的事实标准。然而面对非标准 JavaScript 文件或自定义语法时&#xff0c;你是否遇到过 Modul…

读书笔记:《我看见的世界》

《我看见的世界.李飞飞自传》李飞飞 著&#xff0c;赵灿 译个人理解&#xff1a; 是本自传&#xff0c;也是AI的发展史 坚持&#xff0c;总会转机&#xff0c;“一不小心”也许就成了算法、大规模数据、原始算力人工智能似乎一夜之间从一个小众的学术领域爆发成为推动全球变革的…

使用纯NumPy实现回归任务:深入理解机器学习本质

在深度学习框架普及的今天&#xff0c;回归基础用NumPy从头实现机器学习模型具有特殊意义。本文将完整演示如何用纯NumPy实现二次函数回归任务&#xff0c;揭示机器学习底层原理。整个过程不使用任何深度学习框架&#xff0c;每一行代码都透明可见。1. 环境配置与数据生成 impo…

java理解

springboot 打包 mvn install:install-file -Dfile=<path-to-jar> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=jar <path-to-jar> 是你的 JAR 文件的路径。 <group-id> 是你的项目的组 ID。 <…

图论核心算法详解:从存储结构到最短路径(附C++实现)

目录 一、图的基础概念与术语 二、图的存储结构 1. 邻接矩阵 实现思路&#xff1a; 2. 邻接表 实现思路&#xff1a; 应用场景&#xff1a; 时间复杂度分析&#xff1a; 三、图的遍历算法 1. 广度优先搜索&#xff08;BFS&#xff09; 核心思想&#xff1a; 应用场…

力扣top100(day03-02)--图论

本文为力扣TOP100刷题笔记 笔者根据数据结构理论加上最近刷题整理了一套 数据结构理论加常用方法以下为该文章&#xff1a; 力扣外传之数据结构&#xff08;一篇文章搞定数据结构&#xff09; 200. 岛屿数量 class Solution {// DFS辅助方法&#xff0c;用于标记和"淹没&q…

建造者模式:从“参数地狱”到优雅构建

深夜&#xff0c;一条紧急告警刺穿寂静&#xff1a;核心报表服务因NullPointerException全线崩溃。排查根源&#xff0c;罪魁祸首竟是一个拥有10多个参数的“上帝构造函数”。本文将从这个灾难现场出发&#xff0c;引入“链式建造者模式”进行重构&#xff0c;并深入Spring AI、…

jenkins在windows配置sshpass

我的服务器里jenkins是通过docker安装的&#xff0c;jenkins与项目都部署在同一台服务器上还好&#xff0c;但是当需要通过jenkins构建&#xff0c;再通过scp远程推送到别的服务器上&#xff0c;就出问题了&#xff0c;毕竟不是手动执行scp命令&#xff0c;可以手动输入密码&am…

Linux操作系统从入门到实战(十八)在Linux里面怎么查看进程

Linux操作系统从入门到实战&#xff08;十八&#xff09;在Linux里面怎么查看进程前言一、如何识别一个进程&#xff1f;—— PID二、怎么查看进程的信息&#xff1f;方式1&#xff1a;通过/proc目录方式2&#xff1a;用ps命令三、父进程是什么&#xff1f;—— PPID四、bash是…

[TryHackMe](知识学习)---基于堆栈得到缓冲区溢出

1.了解缓冲区溢出WINDOWS程序动态调试工具immunity debuggerhttps://www.immunityinc.com/products/debugger/2.Mona脚本#!/usr/bin/env python3import socket, time, sysip "10.201.99.37"port 1337 timeout 5 prefix "OVERFLOW1 "string prefix &q…