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文件 音视频入门基础…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 ,你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
