502. IPO(贪心算法+优先队列/堆)

整体思想:在满足可用资金的情况下,选择其中利润最大的业务,直到选到k个业务为止,注意k可能比n大。

每次选择完一个业务,可用资金都会变动,这是可选择的业务也会变化,因此每次将可选择的业务放在一个优先队列(大顶堆)中,堆顶元素就是目标业务。

优先队列(堆)的实现方式:优先队列,自定义比较器。

另外注意,将业务根据所需资金capacity进行升序排列,达到一种剪枝的目的。

class Solution {public int findMaximizedCapital(int k, int w, int[] profits, int[] capital) {int n = profits.length;List<int[]> list = new ArrayList<>();for (int i = 0; i < n; ++i) {list.add(new int[] {capital[i], profits[i]});}Collections.sort(list, (a, b) -> a[0] - b[0]);PriorityQueue<Integer> q = new PriorityQueue<>((a, b) -> b - a);int i = 0;while (k-- > 0) {while (i < n && list.get(i)[0] <= w) q.add(list.get(i++)[1]);if (q.isEmpty()) break;w += q.poll();}return w;}
}

拓展:

  1. 优先队列

    在Java中,优先队列(PriorityQueue)是一种特殊的队列,它可以确保队列中元素的顺序是按照它们的优先级进行排列的数据结构。在优先队列中,具有较高优先级的元素会先被处理,而具有较低优先级的元素会被放置在队列的尾部。

    优先队列可以用于许多应用,比如任务调度、事件模拟等。在Java中,优先队列通常是基于堆(Heap)实现的,这意味着它可以高效地支持插入和删除具有最高(或最低)优先级的元素。

    import java.util.PriorityQueue;  public class Main {  public static void main(String[] args) {  // 创建一个优先队列  PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();  // 向优先队列中添加元素  priorityQueue.add(3);  priorityQueue.add(1);  priorityQueue.add(2);  // 输出队列中的元素(按照优先级顺序)  while (!priorityQueue.isEmpty()) {  System.out.println(priorityQueue.poll());  }  }  
    }  
    

    需要注意的是,当元素被添加到优先队列中时,它们会根据其自然顺序或者根据提供的比较器进行排序。默认情况下,优先队列会按照元素的自然顺序进行排序,但也可以通过提供自定义的比较器来改变排序规则。

  2. 比较器

    在Java中,Collections.sort 方法用于对集合进行排序。它可以接受一个比较器(Comparator)作为第二个参数,以便根据指定的比较规则对集合中的元素进行排序。

    比较器是一个接口,它定义了用于比较两个对象顺序的规则。在Collections.sort中,当传入比较器时,它将根据比较器所定义的规则对集合中的元素进行排序。

    具体来说,比较器的定义如下:

    public interface Comparator<T> {int compare(T o1, T o2);
    }
    

    这个接口中的 compare 方法接受两个参数 o1o2,分别代表要比较的两个对象。在这个方法中,需要定义比较规则,返回一个负整数、零或者正整数,分别表示第一个参数小于、等于或大于第二个参数。

    在实际使用中,可以通过创建实现了Comparator接口的类,或者使用Lambda表达式来定义比较器。比如:

    List<Integer> numbers = Arrays.asList(3, 1, 2);
    Collections.sort(numbers, (a, b) -> a - b);
    

    在这个例子中,(a, b) -> a - b 就是一个比较器,它定义了对整数列表进行升序排序的规则。具体来说,它告诉Collections.sort方法按照元素的大小进行排序。

    总之,比较器允许我们根据特定的规则对集合中的元素进行排序,从而满足不同的排序需求。

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

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

相关文章

3dmax渲不出模型是什么原因---模大狮模型网

3DMax无法渲染模型可能有多种原因。以下是一些常见的问题和解决方法&#xff1a; 材质设置错误&#xff1a;检查模型的材质设置是否正确&#xff0c;包括纹理贴图的路径、UV映射是否正确等。确保材质的属性设置正确&#xff0c;如颜色、反射率、透明度等。 灯光设置问题&#…

【JS逆向学习】某壁纸下载(ast混淆)

逆向目标 目标网址&#xff1a;https://bz.zzzmh.cn/index逆向接口一&#xff1a;https://api.zzzmh.cn/bz/v3/getData逆向接口二&#xff1a;https://cdn2.zzzmh.cn/wallpaper/origin/0d7d8d691e644989b72ddda5f695aca2.jpg?response-content-dispositionattachment&aut…

AnimatedDrawings:让绘图动起来

老样子&#xff0c;先上图片和官网。这个项目是让绘制的动画图片动起来&#xff0c;还能绑定人体的运动进行行为定制。 快速开始 1. 下载代码并进入文件夹&#xff0c;启动一键安装 git clone https://github.com/facebookresearch/AnimatedDrawings.gitcd AnimatedDrawingspip…

react18介绍

改进已有属性&#xff0c;如自动批量处理【setState】、改进Suspense、组件返回undefined不再报错等 支持Concurrent模式&#xff0c;带来新的API&#xff0c;如useTransition、useDeferredValue等 如何升级React 18 npm install reactlatest react-domlatestnpm install ty…

VS2022 在非Qt项目中引用QString、QList等方法

目录 一、新建项目 二、拷贝 三、工程属性设置 四、测试 一、新建项目 在VS中创建了一个c控制台项目&#xff0c;会默认打印“Hello world”&#xff1b; 二、拷贝 需要拷贝的包括QtCore相关的lib, dll, 以及头文件&#xff1b; 1、lib文件 在下述qt安装路径下拷贝Qt5…

[设计模式Java实现附plantuml源码~创建型] 对象的克隆~原型模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

07章【常用类库API】

字符串操作 String类 String可以表示一个字符串。String类实际是使用字符数组存储的。 String类的两种赋值方式&#xff1a; 一种称为直接赋值&#xff1a; String name “小白” 通过关键字new调用String的构造方法赋值 String name new String(“小白”)String类的两…

c++学习理解之路——基类指针指向子类

参考&#xff1a;基类指针指向子类对象_基类指针可以指向子类-CSDN博客 笔记&#xff08;基于自己的理解&#xff0c;欢迎讨论&#xff09; 基类指针对象只存储跟基类中的成员函数、成员对象相关信息&#xff0c;子类指针对象存储了子类和基类中的信息。按道理来说&#xff0c…

【Github】作为程序员不得不知道的几款Github加速神器

背景 众所周知&#xff0c;近几年国内用户在访问Github时&#xff0c;经常间歇性无法访问Github。 接下来推荐几款 作为程序员不得不知道的Github加速神器。 推荐1&#xff1a;FastGithub FastGithub是一款Github加速神器&#xff0c;解决github打不开、用户头像无法加载、r…

【数据结构和算法】--- 二叉树(3)--二叉树链式结构的实现(1)

目录 一、二叉树的创建(伪)二、二叉树的遍历2.1 前序遍历2.2 中序遍历2.3 后序遍历 三、二叉树节点个数及高度3.1 二叉树节点个数3.2 二叉树叶子节点个数3.3二叉树第k层节点个数3.4 二叉树查找值为x的节点 四、二叉树的创建(真) 一、二叉树的创建(伪) 在学习二叉树的基本操作前…

使用Python基于metricbeat和heartbeat采集数据进行告警

一、系统架构 IP主机名角色备注11.0.1.11kafka1kafka和MySQL11.0.1.12kafka2kafka11.0.1.13kafka3kafka11.0.1.14demo1metricbeat和heartbeat 二、部署Kafka 省略 二、部署Metricbeat和Heartbeat metricbeat配置&#xff1a; metricbeat.config.modules:path: ${path.confi…

电商铺货上货接口API实现无货源上货(1688/淘宝/京东/拼多多)

获取商品列表接口 item_search 获取商品详情页数据接口 item_get 1688.item_get 公共参数 获取API测试权限和地址 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包…

Unity Text超框 文字滚动循环显示

Unity Text超框 文字滚动循环显示 //container Text using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; using UnityEngine.UI;public class AutoScrollText : MonoBehaviour {private Text[] _texts new Text[…

MATLAB字符串编辑常用代码

1.字符串赋值 % 字符串赋值 sabcdefg 2.字符串属性和操作 (1)获取字符串长度 sabcdefg;% 字符串赋值 length(a) % 获取字符串长度 (2)连接字符串 % 连接两个字符串,每个字符串最右边的空格被裁切 s1a s2b s3strcat(s1,s2) 3.字符串比较 % strcmp 比较两个字符串是…

251.【2023年华为OD机试真题(C卷)】5G网络建设(最小生成树算法-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-5G网络建设二.解题思路三.题解代码Python题解代…

9. UE5 RPG创建UI(下)

在上一篇文章里&#xff0c;制作了显示血量和蓝量的ui&#xff0c;并且还将ui和获取数据使用的控制器层创建出来并初始化成功。现在只有主用户控件上面被添加了控制器层&#xff0c;还未给每个用户控件赋予控制器层。接下来要实现对属性的广播功能&#xff0c;在属性值变化的时…

【Effective C++】4. 设计与声明

Item22 将成员变量声明为private 有以下几个优势&#xff1a; 1. 语法一致性&#xff1a;访问class成员时每一个都是函数&#xff0c;不需要记住是否需要小括号 2. 使成员变量的处理有更精准的控制 class AccessLevels { public:int getReadOnly() const { return readOnly…

【issue-halcon例程学习】fuzzy_measure_pin.hdev

例程功能 检查IC的引线宽度和引线距离。 代码如下 dev_close_window () read_image (Image, board/board-06) get_image_size (Image, Width, Height) dev_open_window (0, 0, Width, Height, black, WindowHandle) * * --- Fuzzy Measure: Row1 : 305.5 Col1 : 375.5 Phi1 …

电商平台接口自动化测试脚本编写规范与实践

随着电商业务的快速发展&#xff0c;电商平台接口的稳定性和可靠性变得越来越重要。为了提高测试效率和保证接口质量&#xff0c;越来越多的企业开始采用自动化测试技术。本文将介绍电商平台接口自动化测试脚本的编写规范与实践&#xff0c;并给出相应的代码示例。 一、编写规…

gitlab.rb主要配置

根据是否docker安装,进入挂载目录或安装目录 修改此文件,我一般是在可视化窗口中修改,有时候也在命令行手敲 将下面的配置复制到该文件中 external_url http://192.168.100.50 # nginx[listen_port] = 8000 (docker安装的这一行不需要,因为端口映射导致此处修改会导致访问…