算法刷题记录——LeetCode篇(2.7) [第161~170题](持续更新)
更新时间:2025-04-06
- 算法题解目录汇总:算法刷题记录——题解目录汇总
- 技术博客总目录:计算机技术系列博客——目录页
优先整理热门100及面试150,不定期持续更新,欢迎关注!
169. 多数元素
给定一个大小为 n
的数组 nums
,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入:nums = [3,2,3]
输出:3
示例 2:
输入:nums = [2,2,1,1,1,2,2]
输出:2
提示:
n == nums.length
1 <= n <= 5*10^4
-10^9 <= nums[i] <= 10^9
进阶:
尝试设计时间复杂度为 O(n)
、空间复杂度为 O(1)
的算法解决此问题。
188. 买卖股票的最佳时机 IV
给定一个数组,它的第 i
个元素是一支给定的股票在第 i
天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 k
笔交易。
注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例 1:
输入: [2,4,1], k = 2
输出: 2
解释: 在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。
示例 2:
输入: [3,2,6,5,0,3], k = 2
输出: 7
解释: 在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4 。随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3 。
方法一:动态规划(通用解法)
使用三维状态压缩的动态规划,将状态定义为 dp[j][0]
和 dp[j][1]
,分别表示完成 j
次交易后不持有股票和持有股票的最大利润。通过逆序处理交易次数避免状态覆盖问题,并增加无效状态判断。
代码实现(Java):
public class Solution {public int maxProfit(int k, int[] prices) {int n = prices.length;if (k == 0 || n < 2) return 0;// 处理 k 很大的情况,退化为贪心算法if (k >= n / 2) {int maxProfit = 0;for (int i = 1; i < n; i++) {if (prices[i] > prices[i - 1]) {maxProfit += prices[i] - prices[i - 1];}}return maxProfit;}// 动态规划初始化int[][] prevDp = new int[k + 1][2];for (int j = 0; j <= k; j++) {Arrays.fill(prevDp[j], Integer.MIN_VALUE);}prevDp[0][0] = 0; // 0次交易,不持有股票prevDp[0][1] = -prices[0]; // 0次交易,持有股票for (int i = 1; i < n; i++) {int[][] currDp = new int[k + 1][2];for (int j = 0; j <= k; j++) {currDp[j][0] = prevDp[j][0];currDp[j][1] = prevDp[j][1];}int price = prices[i];// 逆序处理交易次数,避免状态覆盖for (int j = k; j >= 1; j--) {// 不持有股票:卖出操作if (prevDp[j][1] != Integer.MIN_VALUE) {currDp[j][0] = Math.max(currDp[j][0], prevDp[j][1] + price);}// 持有股票:买入操作(需要前一次交易完成)if (prevDp[j - 1][0] != Integer.MIN_VALUE) {currDp[j][1] = Math.max(currDp[j][1], prevDp[j - 1][0] - price);}}// 处理 j=0 的持有状态(允许第一次买入)currDp[0][1] = Math.max(prevDp[0][1], -price);prevDp = currDp;}// 寻找最大利润(所有交易次数中的最大不持有状态)int maxProfit = 0;for (int j = 0; j <= k; j++) {maxProfit = Math.max(maxProfit, prevDp[j][0]);}return maxProfit;}
}
复杂度分析
- 时间复杂度:
O(nk)
,每个价格处理k
次交易状态。 - 空间复杂度:
O(k)
,使用两个数组交替保存状态。
方法二:状态压缩优化
进一步压缩动态规划空间,使用一维数组代替二维数组。通过逆序遍历交易次数减少空间使用。
代码实现(Java):
public class Solution {public int maxProfit(int k, int[] prices) {int n = prices.length;if (k == 0 || n < 2) return 0;if (k >= n / 2) {int profit = 0;for (int i = 1; i < n; i++) {if (prices[i] > prices[i - 1]) {profit += prices[i] - prices[i - 1];}}return profit;}int[] buy = new int[k + 1];int[] sell = new int[k + 1];Arrays.fill(buy, Integer.MIN_VALUE);for (int price : prices) {for (int j = k; j >= 1; j--) {buy[j] = Math.max(buy[j], sell[j - 1] - price);sell[j] = Math.max(sell[j], buy[j] + price);}}return sell[k];}
}
复杂度分析
- 时间复杂度:
O(nk)
,每个价格处理k
次交易。 - 空间复杂度:
O(k)
,仅用两个一维数组。
声明
- 本文版权归
CSDN
用户Allen Wurlitzer
所有,遵循CC-BY-SA
协议发布,转载请注明出处。- 本文题目来源
力扣-LeetCode
,著作权归领扣网络
所有。商业转载请联系官方授权,非商业转载请注明出处。
相关文章:
算法刷题记录——LeetCode篇(2.7) [第161~170题](持续更新)
更新时间:2025-04-06 算法题解目录汇总:算法刷题记录——题解目录汇总技术博客总目录:计算机技术系列博客——目录页 优先整理热门100及面试150,不定期持续更新,欢迎关注! 169. 多数元素 给定一个大小为…...
conda安装指定版本python环境
1. 创建指定 Python 版本的环境 使用以下命令创建环境,并将 <env_name> 替换为你的环境名称,<python_version> 替换为具体的 Python 版本(如 3.8, 3.9 等) conda create -n <env_name> python<python_vers…...
PH热榜 | 2025-04-05
1. Comp AI 标语:开源的 Vanta 和 Drata 替代方案 介绍:这款开源的 Drata 和 Vanta 替代方案,能够帮助你在几周内,轻松满足 SOC 2、ISO 27001 和 GDPR 等合规框架的要求,而不是像往常那样拖延数月。 产品网站&#…...
C++之红黑树
目录 一、红黑树的概念 1.1、红黑树的规则 1.2、红黑树如何确保最长路径不超过最短路径的二倍 1.3、红黑树的效率 二、红黑树的实现 2.1、红黑树的结构 2.2、红黑树的插入 2.2.1、红黑树插入一个值的大概过程 2.2.2、情况一:变色 2.2.3、情…...
各个语言对不同数据结构的叫法
一、基础数据结构对比 数组(Array) C/C:固定大小数组(int arr),动态数组通过vector(C)实现 Java:固定数组(int[]),动态数组…...
蓝桥杯 web 水果拼盘 (css3)
做题步骤: 看结构:html 、css 、f12 分析: f12 查看元素,你会发现水果的高度刚好和拼盘的高度一样,每一种水果的盘子刚好把页面填满了,所以咱们就只要让元素竖着排列,加上是竖着,排不下的换行…...
算法专题(八):分治-归并排序
目录 一、排序数组 1.1 题目 2.2 思路 2.3 代码实现 二、LCR 170. 交易逆序对的总数 (数组中的逆序对) 2.1 题目 2.2 思路 方法一:快速统计出某个数前面有多少个数比它大 方法二:快速统计出某个数后面有多少个数比它小 …...
51单片机使用定时器实现LCD1602的时间显示(STC89C52RC)
本文前半部分直接给出实现(注意进位问题是秒->分->小时,用 if 嵌套即可实现),后半部分讲解定时器和中断系统。 效果展示: LCD1602电路图: 项目结构: 代码实现: main.c #…...
微软2025年AI技术深度解析:从多模态大模型到企业级代理服务
微软2025年AI技术深度解析:从多模态大模型到企业级代理服务 一、微软AI技术全景概览 在2025年的AI领域,微软通过Azure AI Foundry、多模态大模型、企业级AI代理三大核心技术,构建了覆盖开发、部署、应用全流程的AI生态体系。根据最新财报数…...
24 设计模式总结
设计模式分类(意图) • 创建型模式:创建对象的机制,从所需要实例化的对象中解耦。 • 结构型模式:将对象或类组装到更大的结构中。 • 行为型模式:负责对象间的交互和分配职责。分类的目的是为了更抽象的了…...
【ARTS】2873.有序三元组中的最大值!
前言 仅做学习使用,侵删 什么是ARTS? 算法(Algorithm): 每周至少一道LeetCode算法题,加强编程训练和算法学习 阅读(Review): 阅读并点评至少一篇英文技术文章,提高英文水平 技巧 (Tip):学习至少一个技…...
Mysql进阶
目录 一.Mysql架构 1.连接层 2.服务层 3.引擎层 4.物理文件存储层 二.Mysql引擎 1.InnoDB 2.MyISAM 三.索引 1.什么是索引 2.为什么要有索引 3.索引的原理 4.索引优势 5.索引劣势 6.索引分类 主键索引 唯一索引 单值索引 组合索引(复合索引&#…...
探秘JVM内部
在我们编写Java代码,点击运行后,会发生什么事呢? 首先,Java源代码会经过Java编译器将其编译成字节码,放在.class文件中 然后这些字节码文件就会被加载到jvm中,然后jvm会读取这些文件,调用相关…...
c语言学习12天
c语言的宏定义:宏定义单纯的文本替换不会检查语法是否合法 #include #pragma 以及开头的#都属于预处理指令 预处理指令:在gcc编译套件中的cpp预处理器对程序进行编译之前所做的一些动作,如#include预处理指令就是在程序编译之前有预处理器…...
公司内网部署离线deepseek本地模型实战
企业内部可能有些数据比较敏感,不能连接互联网。deepseek来提高工作效率,这个时候你可以利用ollama在内网本地部署来实现。 本式样是先在自己电脑上用虚拟机部署好,再用U盘把虚拟机文件复制到内网去。 一、使用VMware新建WIN2022虚拟机 &a…...
rocketmq中的延迟队列使用详解
RocketMQ的延迟队列通过预设的延迟等级实现消息的定时投递,适用于订单超时、定时通知等高并发场景。以下是其核心原理、使用方式及优化策略的详细解析: 一、实现原理 延迟等级机制 RocketMQ默认提供18个固定延迟等级(1s、5s、10s、30s、1m、2…...
VB.NET Asp.Net Core模板WebAPI应用-宝塔面板Linux系统通过Docker部署
宝塔面板支持在Linux系统上部署Docker容器吗? 如何在宝塔面板上通过Docker部署VB.NET应用? Docker容器中的VB.NET Asp.Net Core WebAPI应用如何配置? 一,首先,创建一个ASP.NET Core测试项目 1.1 打开VS2019/2022,创建一个.NTE6 Core控制台应…...
4985 蜗牛
4985 蜗牛 ⭐️难度:中等 ⭐️考点:2023、省赛、动态规划 📖 📚 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner sc new Sc…...
springboot多模块工程打包部署运行
1、问题概述? 基于实际项目打包过程,各种配置面面俱到,已配置的可跳过。 本文以打包jar包为模板进行操作,部署方便。 在实际的开发中,项目的模块可能较多,如果都放在一个项目的目录中,势必会造成项目包中的文件冗余,难以管理,这个时候就需要使用多模块管理项目。 …...
吴恩达深度学习复盘(8)神经网络中激活函数的建模
激活函数的建模原理 到目前为止,在隐藏层等一直使用激活函数,最初通过逻辑回归建立新网络,组合多个逻辑回归单元。这表明激活函数在神经网络构建中一直存在,且最初的网络构建方式与逻辑回归相关。实际上,激活函数的种类…...
1-linux的基础知识
一.linux的文件系统结构 windows文件系统 微软windows系统将硬盘上的几个分区,用A: B: C: D:等符号标识。存取文件时一定要清楚放在那个磁盘的那个目录下。 linux文件系统 linux文件系统的组织模式犹如一颗倒置的树,这与windows文件系统有很大的差别…...
docker 常用命令
文章目录 一、帮助启动类命令启动docker停止docker重启docker查看docker状态开机自启查看docker概要信息 二、镜像命令列出本地主机上的镜像搜索镜像拉取镜像查看镜像所占空间删除镜像 三、容器命令新建运行容器交互式启动容器守护进程式启动容器列出当前所有的容器进入容器之后…...
使用docker搭建redis镜像时云服务器无法访问到国外的docker官网时如何解决
下载redis镜像 docker redis:版本号 此时截图中无法访问到国外的docker官网 解决方案: 通过更换镜像源来正常下载redis镜像 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<EOF {"registry-mirrors": ["https://docker.1…...
基于Python的人脸识别校园考勤系统
【Python】基于Python的人脸识别校园考勤系统 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 🌟 该系统主要分为前端和后端两个部分,前端👀负责人脸采集、人…...
微信小程序学习实录11:startLocationUpdateBackground:fail auth deny
startLocationUpdateBackground:fail auth deny 表明小程序在尝试开启后台位置更新时,用户授权被拒绝。以下是可能的原因及解决方法: 原因分析 缺少必要的用户授权: 使用 wx.startLocationUpdateBackground 接口需要用户授予 scope.userLo…...
DAPP实战篇:规划下我们的开发线路
前言 在DApp实战篇:先用前端起个项目一文中我们起了一个前端项目,在后续开发中笔者将带领大家一步步完成这个DAPP,为了方便后续讲解,本篇将完整说明后续我们要进行的开发和思路。 主打前端 实际上一个完整的DAPP是由前端和智能…...
docker配置redis容器时配置文件docker-compose.yml示例
1.配置数据节点(主从节点) version: 3.7 services:master:image: redis:5.0.9container_name: redis-masterrestart: alwayscommand: redis-server --appendonly yesports:- 6379:6379slave1:image: redis:5.0.9container_name: redis-slave1restart: a…...
清晰易懂的 Jenkins 安装与核心使用教程
Jenkins 是业界领先的开源自动化服务器,用于实现持续集成与持续交付(CI/CD)。本教程将覆盖 安装部署、核心功能配置、避坑指南,助你快速掌握企业级自动化流水线搭建! 一、Jenkins 安装(全平台指南ÿ…...
anomalib—2—输入图像大小调整
三个地方 第一:在定义model时,要在pre_processor里面去定义一个前处理,前处理就一个功能,定义图像的大小 pre_processor0 Patchcore.configure_pre_processor( image_size (128, 128)) model Patchcore( backbone"wide_r…...
小型园区组网图
1. 在小型园区中,S5735-L-V2通常部署在网络的接入层,S8700-4通常部署在网络的核心,出口路由器一般选用AR系列路由器。 2. 接入交换机与核心交换机通过Eth-Trunk组网保证可靠性。 3. 每个部门业务划分到一个VLAN中,部门间的业务在C…...
编程哲学——TCP可靠传输
TCP TCP可靠传输 TCP的可靠传输表现在 (1)建立连接时三次握手,四次挥手 有点像是这样对话: ”我们开始对话吧“ ”收到“ ”好的,我收到你收到了“ (2)数据传输时ACK应答和超时重传 ”我们去吃…...
2024华为OD机试真题-任务最优调度(C++/Java/Python)-E卷-200分
2024华为OD机试最新E卷题库-(D卷+E卷)-(JAVA、Python、C++) 目录 题目描述 输入描述 输出描述 用例1 考点 题目解析 代码 c++ java python 题目描述 给定一个正整数数组表示待系统执行的任务列表,数组的每一个元素代表一个任务,元素的值表示该任务的类型。请计算执…...
蓝桥杯 2023省B 飞机降落 dfs
传送门 P9241 [蓝桥杯 2023 省 B] 飞机降落 - 洛谷 n<10,考虑dfs,只有当 当前飞机的到达时刻盘旋时间 < 上一个飞机降落的时刻 时,当前飞机才能降落 const int N 1e3 10;int n; struct Node {LL t,d,l; }a[N];bool st[N];bool dfs(in…...
Mybatis--动态SQL
动态SQL是MyBatis的重要特征之一,能够完成不同条件下的SQL拼接,参考文档:动态 SQL_MyBatis中文网 一、<if>标签 该标签主要适用的情况为实现必填字段和非必填字段: 例如下面的例子就是将用户表中的性别设置成了非必填字段…...
计算机视觉中的基于网格的卷绕算法全解析
大家好呀~今天给大家带来一个超级实用且有趣的计算机视觉技巧:基于网格的卷绕算法(Grid Warp Algorithm)!如果你对图像变形、动画制作感兴趣,那一定不要错过这篇文章哦!话不多说,直接…...
xv6 文件系统
Buffer Cache buffer Cache 结构体 bcache 存放了 NBUF 个 buf 框,每个框对应 disk 上某一个 block。从初始化函数 binit中可以看出,bcache 是一个循环双向链表。通过双链表组织这些 buf,以近似 LRU 的策略管理,大概如下图。 st…...
Python Cookbook-5.5 根据内嵌的数字将字符串排序
任务 你想将一个字符串列表进行排序,这些字符串都含有数字的子串(比如一系列邮寄地址)。举个例子,“foo2.txt”应该出现在“foo10.txt”之前。然而,Python 默认的字符串比较是基于字母顺序的,所以默认情况下,“foo10.…...
EMC内参二(1-45页)学习【技术进阶】
EMC设计介入产品设计时间越早,成本越低。 微带线和带状线的区别: 微带线是PCB外层的走线,带状线是结余两个完整参考平面(电源层和地层)之间的走线。 天线效应: PCB上面任何悬空的金属都会积累电荷&…...
Ansible(7)——管理机密
目录 一、Ansible Vault : 二、ansible-vault 命令行工具: 1、创建加密文件: 2、查看加密文件: 3、编辑现有加密文件: 4、加密现有文件: 5、解密现有文件: 6、更改加密文件的密码&#…...
通俗地讲述DDD的设计
通俗地讲述DDD的设计 前言为什么要使用DDDDDD架构分层重构实践关键问题解决方案通过领域事件机制解耦服务依赖:防止逻辑下沉 领域划分电商场景下的领域划分 结语完结撒花,如有需要收藏的看官,顺便也用发财的小手点点赞哈,…...
【学Rust写CAD】34 精确 Alpha 混合函数(argb.rs补充方法)
源码 #[inline]pub fn over_exact(self, dst: Argb) -> Argb {let a 255 - self.alpha32();let t dst.rb() * a 0x80_00_80;let mut rb (t ((t >> 8) & Argb::MASK)) >> 8;rb & Argb::MASK;rb self.rb();// saturaterb | 0x1000100 - ((rb >&…...
10种电阻综合对比——《器件手册--电阻》
二、电阻 前言 10种电阻对比数据表 电阻类型 原理 特点 应用 贴片电阻 贴片电阻是表面贴装元件,通过将电阻体直接贴在电路板上实现电路连接 体积小、重量轻,适合高密度电路板;精度高、稳定性好,便于自动化生产 广泛应用于…...
SpringCloud入门及创建分布式项目
1、了解微服务 1.1 什么是微服务 微服务是一种架构风格一个应用拆分为一组小型服务每个服务运行在自己的进程内,也就是可独立部署和升级服务之间使用轻量级HTTP交互服务围绕业务功能拆分可以由全自动部署机制独立部署去中心化,服务自治。服务可以使用不同…...
xv6启动过程
entry,S -> start.c -> main.c -> proc.c中的 userinit 函数 -> initcode.S -> init.c entry.S // entry.S# qemu -kernel loads the kernel at 0x80000000# and causes each CPU to jump there.# kernel.ld causes the following code to# be placed at 0x800…...
【秣厉科技】LabVIEW工具包——OpenCV 教程(18):highgui 模块
文章目录 前言highgui 模块总结 前言 需要下载安装OpenCV工具包的朋友,请前往 此处 ;系统要求:Windows系统,LabVIEW>2018,兼容32位和64位。 highgui 模块 尽量别用,要不我删了吧? LabVIEW…...
基于OPENCV的图像透视矫正
这段代码的主要功能是对输入的图像进行透视矫正。它会读取一张图像,检测图像中最大的四边形轮廓,然后对该四边形区域进行透视变换,将其矫正为正视图,最后保存矫正后的图像。 模块导入说明 python import cv2 import numpy as n…...
数据结构----------顺序查找,折半查找和分块查找(java实现)
import java.util.Arrays;//顺序查找法 public class Main {public static void main(String[] args) {//查找表int[] arr {4, 3, 5, 1, 2};System.out.print("5在数组中的索引:");System.out.println(SearchSeq(arr, 5));Arrays.sort(arr);System.out.print("…...
整数编码 - 华为OD统一考试(A卷、JavaScript)
题目描述 实现一种整数编码方法,使得待编码的数字越小,编码后所占用的字节数越小。 编码规则如下: 编码时7位一组,每个字节的低7位用于存储待编码数字的补码。字节的最高位表示后续是否还有字节,置1表示后面还有更多的字节&…...
CompletableFuture:整合、超时、完成事件与批量处理
引言 在异步编程实践中,我们不仅需要处理单个任务的执行流程,更需要应对多个异步任务之间的复杂交互。本文将通过实际案例解析以下核心功能: 双任务整合:合并两个独立任务的结果高效超时控制:防止异步操作无限等待完…...
【LeetCode 热题100】45:跳跃游戏 II(详细解析)(Go语言版)
🚀 力扣 45:跳跃游戏 II(全解法详解) 📌 题目描述 给你一个非负整数数组 nums,表示你最初位于数组的第一个位置。 数组中的每个元素表示你在该位置可以跳跃的最大长度。 你的目标是使用 最少的跳跃次数 到…...