C语言 | Leetcode C语言题解之第502题IPO

题目:

题解:

#define MIN(a, b) ((a) <= (b) ? (a) : (b))
#define MAX_INT_NUMBER 0x7FFFFFFEtypedef struct {int capital;int profit;
} ProNode;int CompareProfit(const ProNode *a, const ProNode *b)
{   /* 从大到小排序 */return  b->profit - a->profit;
}int findMaximizedCapital(int k, int W, int* Profits, int ProfitsSize, int* Capital, int CapitalSize){int i, j;int maxCap;int flag;/* minIndex最小开始扫描的索引,每次循环扫描第1个资本不够但是利润最大的索引,每次有新的项目收入,都立刻重新从最小索引开始扫描(意味着可能会有原来资本不够,但是利润很大的项目可以重新启动了)*/int minIndex; int minFlag;  /* 第一个资本不够,但是利润最大的索引的辅助标志,辅助判断是否要记录minIndex */ProNode node[ProfitsSize];int maxCnt = MIN(k, CapitalSize);if (k == 0 || CapitalSize == 0 || ProfitsSize == 0) {return W;}for (i = 0; i < CapitalSize; i++) {node[i].profit = Profits[i];node[i].capital = Capital[i];}/* 将所有项目按照利润从大到小排序 */qsort(node, ProfitsSize, sizeof(ProNode), CompareProfit);maxCap = W;minIndex = 0;for (j = 1; j <= maxCnt;) {flag = 0;minFlag = 0;/* 每次扫描剩下的项目,将未访问的,资本允许,利润最大的项目启动 */for (i = minIndex; i < CapitalSize; i++) {if (maxCap >= node[i].capital) {maxCap = maxCap + node[i].profit;                node[i].capital =  MAX_INT_NUMBER;flag = 1;j++;/* 注意:这里是不超时的关键点,如果前面已经有利润大的项目被记录了,要立刻停止,重新判断是否可以启动原来利润大的项目,否则,继续找利润大的项目,可以节省很多循环*/if (minFlag == 1) {break;}  } else if (node[i].capital != MAX_INT_NUMBER && minFlag == 0) {/* 因为资本不够未能启动的项目,记录第一个即可, 下次要从此处开始扫描 */minIndex = i;minFlag = 1;}if (j > maxCnt) {break;}}/* 说明已经没有可以启动的项目了 */if (flag == 0) {break;}}return maxCap;
}

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

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

相关文章

根据发生异常的汇编指令以及函数调用堆栈,从内存的角度出发,估计出问题的可能原因,确定排查方向,快速定位C++软件问题

目录 1、前言 2、初步分析dump文件 3、加载更多模块的pdb文件&#xff0c;可能能看到更多行的函数调用堆栈 4、从内存的角度去看&#xff0c;估计是访问了野指针导致的&#xff0c;沿着这个怀疑的方向快速地定位了问题 5、最后 C软件异常排查从入门到精通系列教程&#xf…

力扣OJ算法题:合并两个有序链表

—————————————————————————————————————————— 正文开始 OJ算法题&#xff1a;合并两个有序链表 思路 创建一个新的空链表&#xff08;可以用malloc优化&#xff09;和两个指针L1、L2分别指向两个链表&#xff0c;遍历两个链表&am…

taro底部导航,Tabbar

没有特别的幸运&#xff0c;那么就特别的努力&#xff01;&#xff01;&#xff01; 配置信息 官方给出&#xff1a; 在 app.config 中按正常填写 tabBar 项的相关配置&#xff08;为了向下兼容&#xff09;&#xff0c;并把 tabBar 项的 custom 字段设置为 true。但我试过 c…

Chromium 中chrome.contextMenus扩展接口实现分析c++

一、chrome.contextMenus 使用 chrome.contextMenus API 向 Google Chrome 的上下文菜单中添加项。您可以选择从右键菜单中添加的对象类型&#xff0c;例如图片、超链接和页面。 权限 contextMenus 您必须在扩展程序的清单中声明 "contextMenus" 权限&#xff0c…

R语言机器学习算法实战系列(十二)线性判别分析分类算法 (Linear Discriminant Analysis)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍LDA的原理LDA的步骤教程下载数据加载R包导入数据数据预处理数据描述数据切割构建模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve保存模型总结优点:缺…

Ubuntu(22.04)本地部署Appsmith

Ubuntu&#xff08;22.04&#xff09;安装Appsmith 简要介绍 Appsmith 是一个开源的低代码开发平台&#xff0c;旨在帮助开发者和非开发者快速构建定制化的内部应用程序和管理工具。通过直观的拖拽界面和丰富的预配置组件&#xff0c;Appsmith 让用户无需编写大量代码即可创建…

Postman使用-基础篇

前言 本教程将结合业界广为推崇和使用的RestAPI设计典范Github API&#xff0c;详细介绍Postman接口测试工具的使用方法和实战技巧。 在开始这个教程之前&#xff0c;先聊一下为什么接口测试在现软件行业如此重要&#xff1f; 为什么我们要学习Postman&#xff1f; 现代软件…

数据轻松上云——Mbox边缘计算网关

随着工业4.0时代的到来&#xff0c;工厂数字化转型已成为提升生产效率、优化资源配置、增强企业竞争力的关键。我们凭借其先进的边缘计算网关与云平台技术&#xff0c;为工厂提供了高效、稳定的数据采集与上云解决方案。本文将为您介绍Mbox边缘计算网关如何配合明达云平台&…

React 基础阶段学习计划

React 基础阶段学习计划 目标 能够创建和使用React组件。理解并使用State和Props。掌握事件处理和表单处理。 学习内容 环境搭建 安装Node.js和npm 访问 Node.js官网 下载并安装最新版本的Node.js。打开终端或命令行工具&#xff0c;输入 node -v 和 npm -v 检查是否安装…

【Python】爬虫

Python爬虫是一种自动化下载网页内容的程序。以下是一个简单的Python爬虫示例&#xff0c;使用requests库获取网页&#xff0c;并用BeautifulSoup解析网页。 首先&#xff0c;你需要安装必要的库&#xff1a; pip install requests pip install beautifulsoup4 以下是一个简…

基于SpringBoot微信小程序的书院预约系统【附源码】

基于SpringBoot微信小程序的书院预约系统 效果如下&#xff1a; 微信小程序首页界面 用户登录界面 书院信息界面 会议室界面 管理员登录界面 管理员主界面 用户界面 书院信息界面 会议室界面 会议室预约界面 研究背景 随着社会的快速发展&#xff0c;计算机技术的影响是全面…

SpringBoot 单元测试 - 登录认证在 Spring Boot 上的标准单元测试写法。

&#x1f449; 请投票支持这款 全新设计的脚手架 &#xff0c;让 Java 再次伟大&#xff01; 不要使用 SpringBootTest 使用 SpringBootTest 进行单元测试会启动整个 Spring Boot 容器&#xff0c;并引入整个项目的 development&test 依赖。缺点是速度慢、体积大、测试目标…

HarmonyOS Next应用开发——图像PixelMap变换

【高心星出品】 图像变换 图片处理指对PixelMap进行相关的操作&#xff0c;如获取图片信息、裁剪、缩放、偏移、旋转、翻转、设置透明度、读写像素数据等。图片处理主要包括图像变换、位图操作&#xff0c;本文介绍图像变换。 图形裁剪 // 裁剪图片 x&#xff0c;y为裁剪的起…

【element-tiptap】如何把分隔线改造成下拉框的形式?

当前的分隔线只有细横线这一种形式 但是咱们可以看一下wps中的分隔线&#xff0c;花里胡哨的 这些在wps里都需要使用快捷键打出来&#xff0c;真没找到菜单在哪里 那么这篇文章咱们就来看一下如何改造分隔线组件&#xff0c;改造成下拉框的形式&#xff0c;并且把咱们想要的分…

如何调试浏览器中的内存泄漏?

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介⭐ 如何调试浏览器中的内存泄漏&#xff1f;1. 什么是内存泄漏&#xff1f;2. 调试内存泄漏的工具3. 如何使用 Memory 面板进行内存调试3.1 获取内存快照&#xff08;Heap Snapshot&#xff09;获取内存快照的步骤&#xff1a;快照…

【ShuQiHere】深入解析数字电路中的锁存器与触发器

深入解析数字电路中的锁存器与触发器 &#x1f916;&#x1f50c; 在数字电路设计中&#xff0c;**锁存器&#xff08;Latch&#xff09;和触发器&#xff08;Flip-Flop&#xff09;**是实现时序逻辑的基本元件。它们能够存储状态&#xff0c;是构建复杂数字系统的关键。本文将…

Dockerfile 中关于 RUN 的奇怪写法 -- 以 | 开头

在一个大型的官方镜像中 &#xff0c;我通过 docker history --no-trunc <image_id> 看到&#xff0c;该镜像某一步的构建过程是&#xff1a; RUN |3 CUDA_VERSION12.4.1.003 CUDA_DRIVER_VERSION550.54.15 JETPACK_HOST_MOUNTS /bin/sh -c if [ -n "${JETPACK_HOS…

如何自定义一个自己的 Spring Boot Starter 组件(从入门到实践)

文章目录 一、什么是 Spring Boot Starter&#xff1f;二、为什么要自定义 Starter&#xff1f;三、自定义 Starter 的基本步骤1. 创建 Maven 项目2. 配置 pom.xml3. 创建自动配置类4. 创建业务逻辑类5. 创建 spring.factories 四、使用自定义 Starter五、总结推荐阅读文章 在使…

Android广播限制Background execution not allowed: receiving Intent { act=

“Background execution not allowed: receiving Intent”这个错误信息通常出现在Android应用开发中&#xff0c;特别是在处理后台任务或接收广播&#xff08;Broadcast&#xff09;时。这个错误表明应用试图在后台执行某些操作&#xff0c;但Android系统出于电池优化和用户体验…

【二刷hot100】day 4

终于有时间刷刷力扣&#xff0c;求实习中。。。。 目录 1.最大子数组和 2.合并区间 3.轮转数组 4.除自身以外数组的乘积 1.最大子数组和 class Solution {public int maxSubArray(int[] nums) {//就是说可以转换为计算左边的最大值&#xff0c;加上中间的值&#xff0c…