当前位置: 首页 > news >正文

【数据结构与算法】LeetCode: 贪心算法

文章目录

  • LeetCode: 贪心算法
    • 买卖股票的最佳时机 (Hot100)
    • 买卖股票的最佳时机 II
    • 跳跃游戏 (Hot100)
    • 跳跃游戏 II(Hot100)
    • 划分字母区间 (Hot100)
    • 分发饼干
    • K次取反后最大化的数组和
    • 合并区间
    • 用最少数量的箭引爆气球
    • 无重叠区间

LeetCode: 贪心算法

买卖股票的最佳时机 (Hot100)

买卖股票的最佳时机

买卖只有一次

class Solution {
public:int maxProfit(vector<int>& prices) {int max_profit = 0;int min_price = INT_MAX ;for(int price : prices){  // ,右边的最大值-左边的最小值为最优值max_profit = max(max_profit, price- min_price); min_price = min(min_price,price);}return max_profit;}
};

买卖股票的最佳时机 II

买卖股票的最佳时机 II

买卖可以有多次

class Solution {
public:int maxProfit(vector<int>& prices) {int result = 0;for(int i = 1; i < prices.size(); i++)result += max(prices[i] - prices[i-1], 0); // 把每天的正收益加起来return result;}
};

跳跃游戏 (Hot100)

跳跃游戏
能否到达最后一个下标

class Solution {
public:bool canJump(vector<int>& nums) {int max_pos  = 0 + nums[0]; // i之前的最远可达位置for(int i = 1; i < nums.size(); i++){   // 枚举每个位置if (i > max_pos) return false;      // i不可达max_pos = max(max_pos, i + nums[i]);}return true;}
};

跳跃游戏 II(Hot100)

跳跃游戏 II
到达最后一个下标的最小跳跃次数

class Solution {
public:int jump(vector<int> &nums) {int ans = 0;    // 跳跃次数int start = 0;  // 当前跳跃可达区间左边界int end = 0;    // 当前跳跃可达空间右边界while (end < nums.size() - 1) {int max_pos = 0;    // 能跳到的最远距离for (int i = start; i <= end; i++) {// 当前可达区间能跳到的最远距离max_pos = max(max_pos, i + nums[i]);}ans++;            // 跳跃start = end + 1;  // 更新左边界end = max_pos;    // 更新右边界}return ans;}
};

划分字母区间 (Hot100)

划分字母区间

统计每一个字符最后出现的位置。
从头遍历字符,并更新已遍历字符的最远出现下标,如果找到最远出现位置下标和当前下标相等了,则找到了分割点

class Solution {
public:vector<int> partitionLabels(string S) {int hash[26] = {0}; // i为字符,hash[i]为字符出现的最后位置for (int i = 0; i < S.size(); i++) { // 统计每一个字符最后出现的位置hash[S[i] - 'a'] = i;}vector<int> result;int left = 0; // 遍历最左下标int right = 0;// 已遍历字符最大出现位置// 从头遍历字符for (int i = 0; i < S.size(); i++) {right = max(right, hash[S[i] - 'a']); // 更新已遍历(i之前)字符最大出现位置// 如果找到已遍历字符最远出现位置下标和当前下标相等了,则找到了分割点if (i == right) { result.push_back(right - left + 1);left = i + 1;}}return result;}
};

分发饼干

分发饼干

class Solution {
public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sort(s.begin(), s.end());int index = s.size() - 1;                 // 饼干数量int result = 0;                           // 喂饱的小孩数量for (int i = g.size() - 1; i >= 0; i--) { // 遍历小孩if (index >= 0 && s[index] >= g[i]) { // 还有饼干且饼干尺寸大于小孩胃口result++;index--;}}return result;}
};

K次取反后最大化的数组和

K次取反后最大化的数组和

class Solution { 
public:int largestSumAfterKNegations(vector<int>& nums, int K) {// 按照绝对值从大到小排列sort(nums.begin(), nums.end(), [](int a, int b){return abs(a) > abs(b);}); for(int i = 0; i < nums.size(); i++){if(nums[i] < 0 && K > 0){  // 把最小的负数变为正nums[i] *= -1;K--;}}// 如果K不为0且nums此时都为正数:负负得正抵消if(K % 2 == 1) nums[nums.size() - 1] *= -1; // 如果K为奇数int result = 0;for(int a : nums) result += a;return result;}
};

合并区间

合并区间

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> result;// 根据左边界从小到大排序sort(intervals.begin(), intervals.end(), [](const vector<int>& a, const vector<int>& b){return a[0] < b[0];});// 第一个区间就可以放进结果集里,后面如果重叠,在result上直接合并result.push_back(intervals[0]); for (int i = 1; i < intervals.size(); i++) {if (result.back()[1] >= intervals[i][0]) { // 发现重叠区间// 合并区间,只更新右边界就好,因为是按照左边界排序的result.back()[1] = max(result.back()[1], intervals[i][1]); } else { // 区间不重叠 ,直接放入result.push_back(intervals[i]); }}return result;}
};

用最少数量的箭引爆气球

用最少数量的箭引爆气球

class Solution {public:int findMinArrowShots(vector<vector<int>>& points) {if (points.size() == 0) return 0;// 按照左边界从小到大排序sort(points.begin(), points.end(), [](vector<int>& a, vector<int>& b){return a[0] < b[0];});int result = 1; // points 不为空至少需要一支箭for (int i = 1; i < points.size(); i++) {if (points[i][0] > points[i - 1][1]) {  // 气球i和气球i-1不挨着result++; // 需要加一支箭}else {  // 气球i和气球i-1挨着points[i][1] = min(points[i - 1][1], points[i][1]); // 更新重叠气球最小右边界}}return result;}
};

无重叠区间

无重叠区间

class Solution {
public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {if (intervals.size() == 0) return 0;//  按照区间左边界从小到大排序sort(intervals.begin(), intervals.end(), [](vector<int>& a, vector<int>& b){return a[0] < b[0];});int result = 1; // 记录非重叠区间的个数// 从左到右,对于重叠的多个区间,优先去掉右边界较大的for (int i = 1; i < intervals.size(); i++) {if (intervals[i][0] >= intervals[i - 1][1]) { // 区间i不与左边右边界最小的区间重叠result++; // 非重叠区间数量+1}else {  // 区间i与左边的区间重叠intervals[i][1] = min(intervals[i - 1][1], intervals[i][1]); // 更新重叠气球最小右边界}}return intervals.size() - result;}
};

相关文章:

【数据结构与算法】LeetCode: 贪心算法

文章目录 LeetCode&#xff1a; 贪心算法买卖股票的最佳时机 &#xff08;Hot100&#xff09;买卖股票的最佳时机 II跳跃游戏 &#xff08;Hot100&#xff09;跳跃游戏 II&#xff08;Hot100&#xff09;划分字母区间 &#xff08;Hot100&#xff09;分发饼干K次取反后最大化的…...

Date 日期类的实现(c++)

本文用c实现日期类 将会实现以下函数 bool operator<(const Date& d);bool operator<(const Date& d);bool operator>(const Date& d);bool operator>(const Date& d);bool operator(const Date& d);bool operator!(const Date& d);Date&…...

智能家居10G雷达感应开关模块,飞睿智能uA级别低功耗、超高灵敏度,瞬间响应快

在当今科技飞速发展的时代&#xff0c;智能家居已经逐渐成为人们生活中不可或缺的一部分。从智能灯光控制到智能家电的联动&#xff0c;每一个细节都在为我们的生活带来便利和舒适。而在众多智能家居产品中&#xff0c;10G 雷达感应开关模块以其独特的优势&#xff0c;正逐渐成…...

头歌——人工智能(机器学习 --- 决策树2)

文章目录 第5关&#xff1a;基尼系数代码 第6关&#xff1a;预剪枝与后剪枝代码 第7关&#xff1a;鸢尾花识别代码 第5关&#xff1a;基尼系数 基尼系数 在ID3算法中我们使用了信息增益来选择特征&#xff0c;信息增益大的优先选择。在C4.5算法中&#xff0c;采用了信息增益率…...

一七一、React性能优化方式

在 React 中进行性能优化可以通过多种手段来减少渲染次数、优化渲染效率并减少内存消耗。以下是常见的性能优化方法及示例&#xff1a; 1. shouldComponentUpdate shouldComponentUpdate 是类组件中的生命周期方法&#xff0c;它可以让组件在判断是否需要重新渲染时&#xff…...

编写dockerfile生成镜像,并且构建容器运行

编写dockerfile生成镜像&#xff0c;并且构建容器运行 目录 编写dockerfile生成镜像&#xff0c;并且构建容器运行 概述 一、dockerfile文件详解 Dockerfile的基本结构 Dockerfile的常用指令 二、构建过程 概述 随着微服务应用越来越多&#xff0c;大家需要尽快掌握dock…...

Java项目练习——学生管理系统

1. 整体结构 代码实现了基本的学生管理系统功能&#xff0c;包括登录、注册、忘记密码、添加、删除、修改和查询学生信息。 使用了ArrayList来存储用户和学生信息。 使用了Scanner类来处理用户输入。 2. 主要功能模块 登录 (logIn)&#xff1a;验证用户名和密码&#xff0c;…...

sqlserver、达梦、mysql的差异

差异项sqlserver达梦mysql单行注释---- 1、-- &#xff0c;--后面带个空格 2、# 包裹对象名称&#xff0c;如表、表字段等 [tableName] "tableName"tableName表字段自增IDENTITY(1, 1)IDENTITY(1, 1)AUTO_INCREMENT二进制数据类型IMAGEIMAGE、BLOBBLOB 存储一个汉字需…...

Spring AOP(定义、使用场景、用法、3种事务、事务失效场景及解决办法、面试题)

目录 1. AOP定义&#xff1f; 2.常见的AOP使用场景&#xff1a; 3.Spring AOP用法 3.1 Spring AOP中的几个核心概念 3.1.1 切面、切点、通知、连接点 3.1.2 切点表达式AspectJ 3.2 使用 Spring AOP 的步骤总结 3.2.1 添加依赖: 3.2.2 定义切面和切点&#xff08;切点和…...

Flutter鸿蒙next 封装对话框详解

✅近期推荐&#xff1a;求职神器 https://bbs.csdn.net/topics/619384540 &#x1f525;欢迎大家订阅系列专栏&#xff1a;flutter_鸿蒙next &#x1f4ac;淼学派语录&#xff1a;只有不断的否认自己和肯定自己&#xff0c;才能走出弯曲不平的泥泞路&#xff0c;因为平坦的大路…...

【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型

前言 随着多模态大模型的发展&#xff0c;其不仅限于文字处理&#xff0c;更能够在图像、视频、音频方面进行识别与理解。医疗领域中&#xff0c;医生们往往需要对各种医学图像进行处理&#xff0c;以辅助诊断和治疗。如果将多模态大模型与图像诊断相结合&#xff0c;那么这会…...

SCSI驱动与 UFS 驱动交互概况

SCSI子系统概况 SCSI&#xff08;Small Computer System Interface&#xff09;子系统是 Linux 中的一个模块化框架&#xff0c;用于提供与存储设备的通用接口。通过 SCSI 子系统&#xff0c;可以支持不同类型的存储协议&#xff08;如 UFS、SATA、SAS&#xff09;&#xff0c…...

软件工程实践项目:人事管理系统

一、项目的需求说明 通过移动设备登录app提供简单、方便的操作。根据公司原来的考勤管理制度&#xff0c;为公司不同管理层次提供相应的权限功能。通过app上面的各种标准操作&#xff0c;考勤管理无纸化的实现&#xff0c;使公司的考勤管理更加科学规范&#xff0c;从而节省考…...

不使用三方软件,win系统下禁止单个应用联网能力的详细操作教程

本篇文章主要讲解&#xff0c;在win系统环境下&#xff0c;禁止某个应用联网能力的详细操作教程&#xff0c;通过本教程您可以快速掌握自定义对单个程序联网能力的限制和禁止。 作者&#xff1a;任聪聪 日期&#xff1a;2024年10月30日 步骤一、按下win按键&#xff08;四个小方…...

近似线性可分支持向量机的原理推导

近似线性可分的意思是训练集中大部分实例点是线性可分的&#xff0c;只是一些特殊实例点的存在使得这种数据集不适用于直接使用线性可分支持向量机进行处理&#xff0c;但也没有到完全线性不可分的程度。所以近似线性可分支持向量机问题的关键就在于这些少数的特殊点。 相较于…...

Golang开发环境

Golang开发环境搭建 Go 语言开发包 国外&#xff1a;https://golang.org/dl/ 国内(推荐)&#xff1a; https://golang.google.cn/dl/ 编辑器 Golang:https://www.jetbrains.com/go/ Visual Studio Code: https://code.visualstudio.com/ 搭建 Go 语言开发环境&#xff0c;需要…...

测试华为GaussDB(DWS)数仓,并通过APISQL快速将(表、视图、存储过程)发布为API

华为数据仓库服务 数据仓库服务&#xff08;Data Warehouse Service&#xff0c;简称DWS&#xff09;是一种基于公有云基础架构和平台的在线数据处理数据库&#xff0c;提供即开即用、可扩展且完全托管的分析型数据库服务。DWS是基于华为融合数据仓库GaussDB产品的云原生服务&a…...

使用GetX实现GetPage中间件

前言 GetX 中间件&#xff08;Middleware&#xff09;是 GetX 框架中的一种机制&#xff0c;用于在页面导航时对用户进行权限控制、数据预加载、页面访问条件设置等。通过使用中间件&#xff0c;可以有效地控制用户的访问流程&#xff0c;并在适当条件下引导用户到所需页面。 这…...

Navicat 17 功能简介 | SQL 预览

Navicat 17 功能简介 | SQL 预览 随着 17 版本的发布&#xff0c;Navicat 也带来了众多的新特性&#xff0c;包括兼容更多数据库、全新的模型设计、可视化智能 BI、智能数据分析、可视化查询解释、高质量数据字典、增强用户体验、扩展MongoDB 功能、轻松固定查询结果、便捷URI …...

ubuntu、Debian离线部署gitlab

一、软件包下载 gitlab安装包下载链接 ubuntu&#xff1a; ubuntu/focal 适用于 ubuntu20系列 ubuntu/bionic 适用于 ubuntu18 系列 Debian&#xff1a; debian/buster 适用于 Debian10系列 debian/bullseye 适用于 Debian11、12系列 二、安装gitlab ubuntu需要安装一些环境…...

数据库编程 SQLITE3 Linux环境

永久存储程序数据有两种方式&#xff1a; 用文件存储用数据库存储 对于多条记录的存储而言&#xff0c;采用文件时&#xff0c;插入、删除、查找的效率都会很差&#xff0c;为了提高这些操作的效率&#xff0c;有计算机科学家设计出了数据库存储方式 一、数据库 数据库的基本…...

独孤思维:总有一双眼睛默默观察你做副业

01 独孤昨天在陪伴群&#xff0c;分享了近期小白做副业的一些困扰。 并且以自己经历作为案例&#xff0c;分享了一些经验和方法。 最后顺势推出xx博主的关于365条赚钱信息小报童专栏。 订阅后&#xff0c;可以开拓副业赚钱思路&#xff0c;避免走一些弯路。 甚至于&#x…...

医院信息化与智能化系统(10)

医院信息化与智能化系统(10) 这里只描述对应过程&#xff0c;和可能遇到的问题及解决办法以及对应的参考链接&#xff0c;并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图&#xff0c;可以试试PlantUML&#xff0c;告诉GPT你的文件结构&#xff0c;让他给你对应…...

基于YOLO11/v10/v8/v5深度学习的危险驾驶行为检测识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…...

Flink CDC系列之:学习理解核心概念——Transform

Flink CDC系列之&#xff1a;学习理解核心概念——Transform Transform参数元数据字段函数比较函数逻辑函数字符串函数时间函数条件函数 示例添加计算列参考元数据列使用通配符投影所有字段添加过滤规则重新分配主键重新分配分区键指定表创建配置分类映射用户定义函数已知限制 …...

MyBatis-Plus:简化 CRUD 操作的艺术

一、关于MyBatis-Plus 1.1 简介 MyBatis-Plus 是一个基于 MyBatis 的增强工具&#xff0c;它旨在简化 MyBatis 的使用&#xff0c;提高开发效率。 ​ ‍ ‍ ‍ ​ ‍ 关于Mybatis 简介 MyBatis 是一款流行的 Java 持久层框架&#xff0c;旨在简化 Java 应用程序与数…...

Windows on ARM编译安装openBLAS

Windows on ARM编译安装openBLAS 要求下载源码OpenBLAS可以使用LLVM工具链(clang-cl和flang)从源代码为Windows on ARM(WoA)进行构建。v0.3.24版本(预构建包)的构建和测试已通过。 要求 LLVM:版本需大于等于17.0.4 LLVM版本16及以下会生成冲突的符号(如_QQ*等)。 LL…...

FPGA编程语言VHDL与Verilog的比较分析!!!

VHDL&#xff08;VHSIC硬件描述语言&#xff09;和Verilog都是用于硬件描述和FPGA编程的工业标准语言。它们在语法和设计理念上存在一些差异&#xff0c;以下是两者的比较分析&#xff1a; 1. 历史背景 VHDL&#xff1a; 开发于1980年代初期&#xff0c;最初用于美国国防部的…...

C语言——八股文(笔试面试题)

1、 什么是数组指针&#xff0c;什么是指针数组&#xff1f; 数组指针&#xff1a;指向数组的指针 指针数组&#xff1a;数组中的元素都是指针 2、 什么是位段&#xff0c;什么是联合体 位段&#xff08;Bit Field&#xff09;&#xff1a;在C语言中&#xff0c;允许在一个整数…...

解决 Oracle 数据库错误 ORA-12516:监听器无法找到匹配协议栈的处理程序

在使用 Oracle 数据库时&#xff0c;有时会遇到错误 ORA-12516&#xff0c;这个错误表明 Oracle 数据库的监听器无法为新的连接请求找到一个可用的处理程序&#xff0c;这通常是因为达到了连接数上限、配置问题或资源限制。本文将详细介绍如何解决这个问题。 一、错误描述 当…...

制作网站客服系统/十大室内设计网站

一.Fragment使用&#xff1a; 要在你的activity中管理Fragment&#xff0c;须要使用FragmentManager&#xff0c;能够通过getFragmentManager()&#xff0c;这里注意要是在v4包要用getSupportFragmentManager()方法。 FragmentManager能够开一个事物调用beginTransaction()方法…...

汽车音响网站建设/广州新闻播报

PopupWindow与PopupMenu的用法 (Blog)[马克飞象|Markdown|Android] PopupWindow与PopupMenu的用法 PopupMenuPopupWindow PopupWindow和PopupMenu的功能都是为了弹出一个窗体&#xff0c;不过PopupMenu的功能比较单一&#xff0c;而PopupWindow更强。 PopupMenu <menu xml…...

wordpress最好的免费主题2018/谷歌官方app下载

本文主要介绍了 IBM UDDI 的安全选项配置以及对应的 UDDI V3 API 的使用。深入剖析了 IBM UDDI 中的 UDDI Publishers, APIs 等高级选项的配置。在文章中&#xff0c;作者给出了使用 UDDI V3 API 与用户个性化安全选项配置协同工作的代码片段。对于不同厂商的 UDDI 产品对 UDDI…...

中上网站建设/新媒体运营

2017-04-06 回答python编程下&#xff0c;检查ip是否能ping通&#xff0c;并且分别导入两个文件&#xff0c;代码如下&#xff1a;#!/usr/bin/python#-*- coding:gb18030 -*-created on 2015-7-7#判断文件中的ip是否能ping通&#xff0c;并且将通与不通的ip分别写到两个文件中#…...

php网站微信支付怎么做/网站建设平台软件

BUG&#xff1a;z-index 有时候设置了很高的值如:z-index:999; 但是最后在IE7中却达不到我们想要的效果&#xff0c;设置了z-index还是被遮盖了。 原因&#xff1a;因为其实是IE7的渲染DOM的问题&#xff0c;当它的父级容器被定位(显示设置了position属性, 如position:relative…...

周口做网站/色盲测试图数字

刻木结绳、算数九章、“1”与“0”……数字&#xff0c;始终与人类文明相生相伴。如今&#xff0c;随着大数据、物联网、人工智能等技术的进步&#xff0c;数字经济蓬勃发展&#xff0c;网络购物、移动支付等新业态、新模式层出不穷&#xff0c;深刻改变着我们的经济形态和生活…...