LeetCode - Google 校招100题 第7天 序列(数据结构贪心) (15题)
欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/144744418
相关文章:
LeetCode 合计最常见的 112 题:
- 校招100题 第1天 链表(List) (19题)
- 校招100题 第2天 树(Tree) (21题)
- 校招100题 第3天 动态规划(DP) (20题)
- 校招100题 第4天 查找排序(Search&Sort) (16题)
- 校招100题 第5天 双指针(Two Pointers) (11题)
- 校招100题 第6天 回溯法(Backtracking) (8题)
- 校招100题 第7天 序列(数据结构&贪心) (15题)
- 校招100题 第8天 图(Graph) (2题)
序列(数据结构&贪心) 算法包括栈、字典、集合、贪心等,基于不同的数据存储和访问方式的数据结构。栈(Stack) 是一种 后进先出(LIFO) 的数据结构,支持 推入(append) 和 弹出(pop) 操作,常用于处理嵌套问题和回溯算法。字典(Map) 是一种基于键值对的存储结构,提供快速的查找、插入和删除操作,其效率通常与哈希表的实现有关。集合(Set) 是一种无序且元素唯一的数据结构,支持高效的成员检查、添加和删除操作,常用于去重和数学集合操作。
题目(15题):
- 栈:20. 有效的括号 (Easy)、32. 最长有效括号 (Hard)、394. 字符串解码、739. 每日温度 (单调栈)
- 集合:128. 最长连续序列
- 字典:49. 字母异位词分组、560. 和为 K 的子数组 (前缀树字典)
- 贪心:55. 跳跃游戏、45. 跳跃游戏 II、134. 加油站、121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II
- 矩阵模拟:48. 旋转图像、54. 螺旋矩阵、59. 螺旋矩阵 II
1. 栈
1.1 20. 有效的括号 (Easy)
class Solution:def isValid(self, s: str) -> bool:"""有效括号,()[]{},时间O(N),空间O(N)"""stack = []pair_list = [['(', ')'], ['{', '}'], ['[', ']']]for c in list(s):if c in ['(', '{', '[']:stack.append(c)continueif not stack:return Falsefor p in pair_list:if c == p[1]:if stack.pop() != p[0]:return Falsereturn True if not stack else False
1.2 32. 最长有效括号 (Hard)
class Solution:def longestValidParentheses(self, s: str) -> int:"""最长有效括号, stack+flags更清晰,格式正确且连续,时间O(n), 空间O(n)"""n = len(s)flags = [False] * n # dpstack = [] # 使用stack保存索引值for i in range(n):if s[i]=='(':stack.append(i)else:if stack:j = stack.pop(-1)flags[i], flags[j] = True, True # 匹配成功时标记 val, res = 0, 0for flag in flags: # 计算连续1出现的最大次数if flag:val += 1else: #遇到0时中断,进行对比,并重置res = max(res, val) val = 0res = max(res, val) #最后一次统计可能未终断,多做一次对比return res
1.3 394. 字符串解码
class Solution:def decodeString(self, s: str) -> str:"""栈操作,类似3[a]2[bc],时间O(S+|s|),空间复杂度O(S)"""stack = []res = ""for c in s:if c != "]": # 不等于stack.append(c)else: # 解码"]"tmp = ""while stack[-1] != "[":item = stack.pop()tmp += item[::-1] # 内部需要翻转,防止嵌套括号tmp = tmp[::-1] # 整体进行翻转stack.pop()times = ""while stack and stack[-1].isdigit():times += stack.pop()tmp = tmp * int(times[::-1])stack.append(tmp)res = "".join(stack)return res
1.4 739. 每日温度
class Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:"""最高温度出现在第几天之后,输入列表,返回列表。单调栈,当前大于栈内最大值,则更新结果之后出栈时间O(n),空间O(n)"""n = len(temperatures)stack = [] # 单调栈res = [0] * nfor i in range(n):while stack and temperatures[i] > temperatures[stack[-1]]:res[stack[-1]] = i - stack[-1]stack.pop()stack.append(i)return res
2. 集合
2.1 128. 最长连续序列
class Solution:def longestConsecutive(self, nums: List[int]) -> int:"""最长连续序列,不考虑顺序,只考虑是否+1(连续),哈希表,依次判断是否存在,时间O(N),空间O(N)"""res = 0n_set = set(nums)for num in n_set:if (num - 1) not in n_set: # 避免重复计算tmp = 1 # 连续值val = numwhile (val+1) in n_set:tmp += 1val += 1res = max(res, tmp)return res
3. 字典
3.1 49. 字母异位词分组
class Solution:def groupAnagrams(self, strs: List[str]) -> List[List[str]]:"""排序key的字典,时间O(n*klogk), 空间(nk)"""mp = collections.defaultdict(list)for s in strs:x = "".join(sorted(s))mp[x].append(s) # 组成字典res = []for k in mp.keys():res.append(mp[k]) # 添加原始数据return res
3.2 560. 和为 K 的子数组 (前缀和PreSum)
class Solution:def subarraySum(self, nums: List[int], k: int) -> int:"""前缀和 + 哈希表优化: pre[i]-pre[j-1]=k -> pre[j-1]=pre[i]-kpre[i]是前n项的和, pre[j-1]是之前出现的和,统计哈希表中pre[j-1]出现的次数,即可。时间复杂度O(N), 空间O(N)"""n = len(nums)presum = 0 # presum[i],前缀值res = 0mp = collections.defaultdict(int) # 统计前缀值出现的次数mp[0] = 1 # 注意,初始化前缀值0是1for i in range(n):presum += nums[i]tmp = presum - k # pre[j-1]的值if tmp in mp.keys(): # 这个值出现过,加入这个值出现的次数res += mp[tmp]mp[presum] += 1 # 加入新值return res
4. 贪心
4.1 55. 跳跃游戏
class Solution:def canJump(self, nums: List[int]) -> bool:"""跳跃游戏1,是否成功,贪心,最大跳跃长度,超越数组,时间O(n),空间O(1)"""n = len(nums)max_v = 0 # 到达的最远距离for i in range(n):if i <= max_v: # 判断当前点能否到达max_v = max(max_v, nums[i]+i) # nums[i]+i 跳跃的最大长度if max_v >= n-1: # 大于最后一个位置return Trueelse:breakreturn False
4.2 45. 跳跃游戏 II
class Solution:def jump(self, nums: List[int]) -> int:"""跳跃游戏2,最小跳跃次数,贪心,时间O(n),空间O(1)"""n = len(nums)max_v = 0 # 到达的最远距离res, max_end = 0, 0for i in range(n-1):if i <= max_v: # 小于一次最远位置max_v = max(max_v, nums[i]+i) # 当前最远的位置if i == max_end: # i到达边界步数max_end = max_v # 更新最大边界,同时跳跃次数+1res+=1 # 步数+1,一次一次的更新return res
4.3 134. 加油站
class Solution:def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:"""运行环路一周,贪心算法,gas是加油数量,cost是花费,选择起始位置燃料最低点的下一个开始,时间O(n), 空间O(1)"""n = len(gas)val = 0min_v= float("inf")min_i = 0 # 燃料最低点的位置for i in range(n):val += gas[i] - cost[i] # 累计剩余燃料if val <= min_v: # 保存剩余燃料最低值min_v = valmin_i = iif val < 0:return -1return (min_i+1) % n # 最低燃料的下一个开始
4.4 121. 买卖股票的最佳时机
class Solution:def maxProfit(self, prices: List[int]) -> int:"""买卖股票1,只在一只赚钱,时间O(n),空间O(1)"""prev = prices[0]res = 0n = len(prices)for i in range(n):res = max(res, prices[i]-prev)prev = min(prev, prices[i])return res
4.5 122. 买卖股票的最佳时机 II
class Solution:def maxProfit(self, prices: List[int]) -> int:"""买卖股票2,赚差价,贪心,累加区间最大值,时间O(n),空间O(1)"""n = len(prices)res=0for i in range(1, n):res + = max(0, prices[i]-prices[i-1])return res
5. 矩阵模拟
5.1 48. 旋转图像
class Solution:def rotate(self, matrix: List[List[int]]) -> None:"""水平翻转(上下翻转)、对角线翻转,即是旋转图像时间O(n^2),空间O(1)"""if not matrix or not matrix[0]:returnm = len(matrix)n = len(matrix[0])# 水平翻转for i in range(m//2):for j in range(n):matrix[i][j], matrix[m-i-1][j] = matrix[m-i-1][j], matrix[i][j]# 对角矩阵翻转for i in range(m):for j in range(i):matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
5.2 54. 螺旋矩阵
class Solution:def spiralOrder(self, matrix: List[List[int]]) -> List[int]: """4个指针 + 上右不用判断,下左需要判断边界,时间O(mn), 空间O(1), 空间排除输出之外的复杂度"""if not matrix or not matrix[0]:return []m = len(matrix)n = len(matrix[0])res = []left, right, top, bottom = 0, n-1, 0, m-1while left <= right and top <= bottom:for i in range(left, right+1):res.append(matrix[top][i])for i in range(top+1, bottom+1):res.append(matrix[i][right])# 非常重要的边界判断,否则会重复if left < right and top < bottom:for i in range(right-1, left-1, -1):res.append(matrix[bottom][i])for i in range(bottom-1, top, -1):res.append(matrix[i][left])left += 1right -= 1top += 1bottom -= 1return res
5.3 59. 螺旋矩阵 II
class Solution:def generateMatrix(self, n: int) -> List[List[int]]:"""螺旋矩阵2,生成矩阵与 剑指 Offer 29. 顺时针打印矩阵 类似,注意:外层是while left <= right and top <= bottom,有等于内层是if left < right and top < bottom,没有等于时间复杂度是O(n^2),空间是O(1)"""left, right = 0, n-1top, bottom = 0, n-1matrix = [[0] * n for _ in range(n)]num = 0while left <= right and top <= bottom:for i in range(left, right+1):num += 1matrix[top][i] = numfor i in range(top+1, bottom+1):num += 1matrix[i][right] = numif left < right and top < bottom:for i in range(right-1, left-1, -1):num += 1matrix[bottom][i] = numfor i in range(bottom-1, top, -1):num += 1matrix[i][left] = numleft += 1right -= 1top += 1bottom -= 1return matrix
相关文章:

LeetCode - Google 校招100题 第7天 序列(数据结构贪心) (15题)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144744418 相关文章: LeetCode 合计最常见的 112 题: 校招100题 第1天 链表(List) (19题)校招100题 第2天 树(Tree) (21…...

深入理解Redis:从理论到实践的Java之旅
Redis,这个开源的内存数据结构存储系统,自2009年诞生以来,凭借其丰富的数据结构、快速的读写性能以及高度的可扩展性,迅速成为了分布式系统和高并发应用中的明星组件。本文将带你深入理解Redis,并通过Java语言的实践示…...

LabVIEW故障诊断中的无故障数据怎么办
在使用LabVIEW进行故障诊断时,可能会面临“无故障数据”的情况。这种情况下,缺乏明确的故障参考,使得系统难以通过传统对比法进行故障识别。本文将介绍应对无故障数据的关键策略,包括数据模拟、特征提取和基于机器学习的方法&…...

基于DIODES AP43781+PI3USB31531+PI3DPX1207C的USB-C PD Video 之全功能显示器连接端口方案
随着USB-C连接器和PD功能的出现,新一代USB-C PD PC显示器可以用作个人和专业PC工作环境的电源和数据集线器。 虽然USB-C PD显示器是唯一插入墙壁插座的交流电源输入设备,但它可以作为数据UFP(上游接口)连接到连接到TCD࿰…...

MySQL配置my.ini文件
my.ini文件中存储了数据库的文件地址,数据库数据存储地址以及登录密码等基础信息。在遇到忘记密码或者其他基础问题时,修改my.ini文件很方便。但是部分数据库版本默认不生成my.ini文件,需要自己进行配置。 1.停止数据库服务。在搜索框中输入…...
JVM常见排查问题的命令及可视化工具
前置: RMI协议:java的一个远程调用协议,在不同的JVM之间可以进行接口的调用,但数据不安全,且仅限java; 一、常见命令及用法 1、jps:与Linux的ps命令有点类似,查看系统中在运行的J…...

【python】matplotlib(moon cake)
文章目录 1、Style12、Style23、Style34、Style45、Style56、Style67、Style78、参考的库函数matplotlib.patches.Arcmatplotlib.patches.Wedge 9、参考 1、Style1 """ author: tyran """from numpy import sin, cos, pi import matplotlib.pyp…...

Pytorch使用手册-空间变换网络指南(专题十五)
在本教程中,您将学习如何使用一种称为空间变换网络(Spatial Transformer Networks, STN)的视觉注意力机制来增强您的网络。您可以在DeepMind的论文中了解更多关于空间变换网络的内容。 空间变换网络是可微分注意力的一种推广,可以应用于任何空间变换。空间变换网络(简称S…...

Vue 中el-table-column 进行循环,页面没渲染成功
文章目录 前言效果图代码示例可能出现的问题及原因**解决思路** 前言 实现效果:el-table-column 进行循环,使之代码简化 遇到的问题: data进行默认赋值,操作列的删除都可以出来,其他表格里面的数据没出来 效果图 示例…...

基于单片机的温湿度采集系统(论文+源码)
2.1系统的功能 本系统的研制主要包括以下几项功能: (1)温度检测功能:对所处环境的温度进行检测; (2)湿度检测功能:对所处环境的湿度进行检测; (3)加热和制冷功能:可以完成加热和制冷功能。 (4)加湿和除…...
使用envoyfilter添加请求头
该envoyfilter实现了这样一个功能,如果请求头中含有Sw8,则添加请求头HasSw8: true。 1. 内嵌lua脚本 apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata:name: add-header-filternamespace: demo-bookinfo # 可根据实际情况调整命…...

kafka开机自启失败问题处理
前言:在当今大数据处理领域,Kafka 作为一款高性能、分布式的消息队列系统,发挥着举足轻重的作用。无论是海量数据的实时传输,还是复杂系统间的解耦通信,Kafka 都能轻松应对。然而,在实际部署和运维 Kafka 的…...

优化站群SEO:使用苹果CMS泛目录插件实现泛目录页面刷新不变
优化站群SEO:使用苹果CMS泛目录插件实现泛目录页面刷新不变 在当今数字营销环境中,搜索引擎优化(SEO)是提升网站流量和可见性的关键策略。苹果CMS作为一款灵活的内容管理系统,提供了丰富的插件功能,尤其是…...

git clone 和 conda 换源
文章目录 git clone 通过 sshconda 创建虚拟环境通过 env.yml 文件conda 换源 git clone 通过 ssh git clone ssh://用户名IP地址:/仓库名字.gitconda 创建虚拟环境通过 env.yml 文件 conda env create -f environment.ymlconda 换源 Step 1 生成 .bashrc 文件在家目录下。…...

人工智能及深度学习的一些题目(二)
1、【单选题】 不属于语音识别预处理的步骤是哪个? 去重 2、HSV,H是色调,S是饱和度,V是亮度。 3、【填空题】 语音信号预处理中( 预加重 )的目的是为了对语音的高频部分进行加重,去除口唇辐射的…...

怎么在VMware Workstation上安装Win11虚拟机?
Windows11虚拟机是免费的吗? Windows 11 虚拟机本身并不是免费的。你需要一个合法的 Windows 11 许可证才能在虚拟机中运行。不过,许多虚拟机软件(如 VirtualBox 和 VMware Workstation Player)本身是免费的,允许你创…...

协程原理 函数栈 有栈协程
协程为什么开销小于线程 协程本质上是线程,将调度的代码在用户态重新实现,因为子程序切换不是线程切换而是由程序自身控制,没有线程切换的开销,所以执行效率高。协程通常是纯软件实现的多任务,与CPU和操作系统通常没有…...

SpringBoot整合springmvc、扩展springmvc
目录 一、 SpringMVC三大组件二、 Spring MVC 组件的自动管理2.1 中央转发器(DispatcherServlet)2.2 控制器2.3 视图解析器自动管理2.4 静态资源访问2.5 消息转换和格式化2.6 欢迎页面的自动配置 三、Springboot扩展springmvc3.1 视图控制器注册…...

免费部署本地AI大语言模型聊天系统:Chatbox AI + 马斯克grok2.0大模型(简单5步实现,免费且比GPT4.0更好用)
摘要: 本文将指导您如何部署一个本地AI大语言模型聊天系统,使用Chatbox AI客户端应用和grok-beta大模型,以实现高效、智能的聊天体验。 引言: 由马斯克X-AI发布的Grok 2大模型以其卓越的性能超越了GPT4.0。Grok模型支持超长文本…...

音视频入门基础:MPEG2-TS专题(22)——FFmpeg源码中,获取TS流的音频信息的实现
音视频入门基础:MPEG2-TS专题系列文章: 音视频入门基础:MPEG2-TS专题(1)——MPEG2-TS官方文档下载 音视频入门基础:MPEG2-TS专题(2)——使用FFmpeg命令生成ts文件 音视频入门基础…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...

【iOS】 Block再学习
iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...