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

leetcode 1235

leetcode 1235

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码

class Solution {
public:int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {int n = startTime.size();vector<vector<int>> jobs(n);for(int i=0; i<n; i++){jobs[i] = {startTime[i], endTime[i], profit[i]};}sort(jobs.begin(), jobs.end(), [](const vector<int>&job1, const vector<int>&job2){return job1[1] < job2[1]; });vector<int> dp(n+1);for(int i=1; i<=n; i++){//找到结束时间大于i-th job的开始时间的job id, 因为是有序的,所以id 可以转为对应的job数量, dp[2th job] 表示前两个job的最优解答,局部最优成为全局最优解答int k = upper_bound(jobs.begin(), jobs.begin()+i-1, jobs[i-1][0], [](int st, vector<int>& job){return st < job[1];}) - jobs.begin();dp[i] = max(dp[i-1], dp[k] + jobs[i-1][2]);}return dp[n];}
};

例子

在这里插入图片描述
遍历已经排序过的jobs, dp[0] =0;
1,3,20, -> dp[1] = 20
2,3,50 -> dp[2] = 50
4,6,70 -> dp[3] = dp[2] + 70 = 120
6,9,60 -> dp[4] = dp[3] + 60 = 180
3,10,100 -> dp[5] = max (dp[4], dp[2] +100) =180

upper_bound

std::upper_bound 函数在 C++ 标准库 <algorithm> 头文件中定义。以下是一个可能的实现:

template<class ForwardIt, class T, class Compare>
ForwardIt upper_bound(ForwardIt first, ForwardIt last, const T& value, Compare comp)
{ForwardIt it;typename std::iterator_traits<ForwardIt>::difference_type count, step;count = std::distance(first, last);while (count > 0) {it = first;step = count / 2;std::advance(it, step);if (!comp(value, *it)) {first = ++it;count -= step + 1;} else {count = step;}}return first;
}

这段代码展示了 std::upper_bound 的基本工作原理。它采用了二分查找的方法,在已排序的范围 [first, last) 中查找第一个大于 value 的元素。

参数解释:

  • first:范围的起始迭代器
  • last:范围的终止迭代器
  • value:要查找的值
  • comp:比较函数对象,用于定义元素的比较方式

该实现假设了输入的迭代器是随机访问迭代器,因此可以使用 std::advancestd::distance 来计算迭代器之间的距离和移动迭代器。实际的标准库实现可能会更加复杂,并且会根据不同的情况进行优化。

upper_bound(jobs.begin(), jobs.begin()+i-1, jobs[i-1][0], [](int st, vector<int>& job){return st < job[1];})

upper_bound(jobs.begin(), jobs.begin()+i-1, jobs[i-1][0], [](int st, vector<int>& job){return st > job[1];})

的区别:
这两个 upper_bound 函数调用的区别在于它们所使用的比较函数对象的不同。这些函数都是用来在已排序的序列中查找某个值的上界的。让我们分析一下这两个调用:

  1. 第一个调用使用的比较函数是 [](int st, vector<int>& job){ return st < job[1]; },它的作用是比较给定的时间 st 和任务的结束时间 job[1]。这个比较函数适用于在结束时间升序排序的情况下查找 st 的上界,即在 jobs 中找到第一个结束时间大于 st 的任务的位置。

  2. 第二个调用使用的比较函数是 [](int st, vector<int>& job){ return st > job[1]; },它的作用是比较给定的时间 st 和任务的结束时间 job[1]。这个比较函数适用于在结束时间降序排序的情况下查找 st 的上界,即在 jobs 中找到第一个结束时间小于 st 的任务的位置。

所以,这两个调用的区别在于它们所使用的比较函数导致了不同的排序顺序和查找逻辑。

函数对象介绍

函数对象是指可以像函数一样被调用的对象。在C++中,函数对象可以是函数指针、函数、Lambda 表达式或重载了函数调用运算符 operator() 的类对象。

函数对象可以作为参数传递给标准库中的算法,如 std::sortstd::find_if 等,用于指定算法的行为。这种方式使得算法更加灵活,可以根据不同的需求使用不同的比较方式或操作方式。

以下是一些关于函数对象的重要概念和用法:

  1. 函数调用运算符 operator():重载了这个运算符的类对象可以像函数一样被调用。当对象被调用时,operator() 会被执行。

  2. Lambda 表达式:Lambda 表达式是一种轻量级的匿名函数,可以用于创建临时的函数对象。它可以在需要函数对象的地方直接定义,使代码更加简洁。

  3. 标准库算法:标准库提供了许多算法,如排序、查找、变换等,这些算法通常都可以接受函数对象作为参数,用于指定算法的行为。

  4. 适配器:函数对象可以通过适配器来改变其行为,如 std::bind 可以用于绑定参数,std::not1 可以用于对谓词取反等。

函数对象的灵活性和可重用性使得它们在C++中被广泛应用于各种场景,包括算法、事件处理、回调函数等。

可调用对象

可调用对象是指可以像函数一样被调用的对象。在 C++ 中,可调用对象可以是函数、函数指针、成员函数指针、函数对象(仿函数)、Lambda 表达式等。它们都可以在调用时像函数一样被执行。

不同类型的可调用对象:

  1. 函数:最基本的可调用对象,就是传统的函数。
int add(int a, int b) {return a + b;
}
  1. 函数指针:指向函数的指针,可以像函数一样被调用。
int (*funcPtr)(int, int) = add;
int result = funcPtr(3, 4); // 调用函数指针
  1. 成员函数指针:指向类的成员函数的指针。
class MyClass {
public:int multiply(int a, int b) {return a * b;}
};int (MyClass::*memFuncPtr)(int, int) = &MyClass::multiply;
MyClass obj;
int result = (obj.*memFuncPtr)(3, 4); // 调用成员函数指针
  1. 函数对象(仿函数):重载了函数调用运算符 operator() 的类对象,可以像函数一样被调用。
class Add {
public:int operator()(int a, int b) {return a + b;}
};Add addObj;
int result = addObj(3, 4); // 调用函数对象
  1. Lambda 表达式:匿名函数,可以直接在需要的地方定义和使用,也可以像函数一样被调用。
auto lambda = [](int a, int b) { return a + b; };
int result = lambda(3, 4); // 调用 Lambda 表达式

在 C++ 中,可调用对象的灵活性和多样性使得它们可以适用于各种不同的场景,例如作为算法的参数、事件处理、回调函数等。

lower_bound 和 upper_bound 的区别?

lower_boundupper_bound 在功能上有所区别,尽管它们都是用于在有序序列中进行查找的算法:

  1. lower_bound

    • 返回的是第一个大于或等于给定值的元素的位置。
    • 如果在序列中找不到大于或等于给定值的元素,则返回指向序列末尾的迭代器。
    • 如果序列中存在多个等于给定值的元素,lower_bound 会返回它们中第一个元素的位置。
  2. upper_bound

    • 返回的是第一个大于给定值的元素的位置。
    • 如果在序列中找不到大于给定值的元素,则返回指向序列末尾的迭代器。
    • 如果序列中存在多个等于给定值的元素,upper_bound 会返回大于这些元素的第一个位置。

因此,lower_bound 返回的位置可能是等于给定值的元素的位置,而 upper_bound 则一定是大于给定值的元素的位置。这两个函数在处理有序序列时很有用,尤其是在需要进行范围查询或插入操作时。

sort 函数

std::sort 是 C++ 标准库中的一个算法,位于 <algorithm> 头文件中,用于对序列进行排序。它采用的是快速排序(Quicksort)或者堆排序(Heapsort)等效率较高的排序算法。

std::sort 函数的函数签名如下:

template< class RandomIt >
void sort( RandomIt first, RandomIt last );

其中:

  • firstlast 是表示要排序的序列的迭代器范围,即 [first, last),它们定义了要排序的区间。

std::sort 函数会按照默认的升序规则对指定的序列进行排序。

要按照降序规则排序,可以通过传递一个自定义的比较函数作为第三个参数。比较函数应当返回一个布尔值,指示其第一个参数是否应该排在第二个参数之前。如果第一个参数应排在第二个参数之前,则返回 true;否则,返回 false

以下是一个示例,展示如何使用 std::sort 对序列进行升序和降序排序:

#include <iostream>
#include <algorithm>
#include <vector>// 自定义比较函数,用于降序排序
bool descending(int a, int b) {return a > b;
}int main() {std::vector<int> vec = {5, 2, 9, 3, 7};// 升序排序std::sort(vec.begin(), vec.end());std::cout << "Ascending order: ";for (int num : vec) {std::cout << num << " ";}std::cout << std::endl;// 降序排序std::sort(vec.begin(), vec.end(), descending);std::cout << "Descending order: ";for (int num : vec) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

在这个示例中,我们首先使用 std::sort 对序列进行升序排序,然后再次调用 std::sort,但这次传递了自定义的比较函数 descending,从而实现了降序排序。

相关文章:

leetcode 1235

leetcode 1235 代码 class Solution { public:int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {int n startTime.size();vector<vector<int>> jobs(n);for(int i0; i<n; i){jobs[i] …...

Activiti7 开发快速入门【2024版】

记录开发最核心的部分&#xff0c;理论结合业务实操减少废话&#xff0c;从未接触工作流快速带入开发。假设你是后端的同学学过JAVA和流程图&#xff0c;则可以继续向后看&#xff0c;否则先把基础课程书准备好先翻翻。 为什么要工作流 比起直接使用状态字段&#xff0c;工作…...

vue3组件插槽

Index.vue: <script setup> import { ref, onMounted } from vue import Child from ./Child.vue import ./index.cssonMounted(() > {}) </script><template><div class"m-home-wrap"><Child>插槽</Child><div class&qu…...

Cloudera简介和安装部署

ChatGPT Cloudera 是一个基于 Apache Hadoop 的数据管理和分析平台。它是由 Hadoop 的几位创始人及早期贡献者于 2008 年创立的公司&#xff0c;并随着公司的不断发展&#xff0c;Cloudera 开始提供企业级的解决方案&#xff0c;帮助企业更好地利用 Hadoop 生态系统进行大数据…...

Spring Boot集成Ldap快速入门Demo

1.Ldap介绍 LDAP&#xff0c;Lightweight Directory Access Protocol&#xff0c;轻量级目录访问协议. LDAP是一种特殊的服务器&#xff0c;可以存储数据数据的存储是目录形式的&#xff0c;或者可以理解为树状结构&#xff08;一层套一层&#xff09;一般存储关于用户、用户…...

杨辉三角的打印

题目内容&#xff1a; 在屏幕上打印杨辉三角。 思路&#xff1a; 首先我们通过观察发现&#xff0c;每一步的打印都与行列数有关&#xff0c;中间的数据由这一列和上一行的前一列数据控制。所以我们可以使用二维数组进行操作&#xff1a; &#xff08;&#xff11;&#xff…...

贪吃蛇(下)游戏的实现

感谢大佬的光临各位&#xff0c;希望和大家一起进步&#xff0c;望得到你的三连&#xff0c;互三支持&#xff0c;一起进步 个人主页&#xff1a;LaNzikinh-CSDN博客 文章目录 前言一.蛇和食物的打印二.游戏的运行逻辑三.结束游戏 &#xff08;善后工作&#xff09;四.游戏的测…...

偏微分方程算法之椭圆型方程差分格式编程示例

目录 一、示例1-五点菱形格式 1.1 C代码 1.2 计算结果 二、示例2-九点紧差分格式 2.1 C代码 2.2 计算结果 三、示例3-二阶混合边值 3.1 C代码 3.2 计算结果 本专栏对椭圆型偏微分方程的三种主要差分方法进行了介绍&#xff0c;并给出相应格式的理论推导过程。为加深对…...

PCIe协议之-TLP路由基础

✨前言&#xff1a; 在PCI Express (PCIe) 技术中&#xff0c;数据包的路由方式对于确保信息能够高效、准确地传送至目标设备至关重要。PCIe定义了几种路由方式&#xff0c;主要有以下几种。 &#x1f31f;地址路由&#xff08;Address Based Routing&#xff09; 这是最基本…...

inline内联函数-虚函数(virtual)可以是内联函数(inline)吗?

目录标题 inline内联函数特征&#xff1a;使用&#xff1a;编译器对inline函数的处理步骤优点&#xff1a;缺点&#xff1a; 虚函数&#xff08;virtual&#xff09;可以是内联函数&#xff08;inline&#xff09;吗&#xff1f;特征&#xff1a;使用&#xff1a; inline内联函…...

Spring Boot | Spring Boot 消息管理 ( 消息中间件 ) 、RabbitMQ“消息中间件“

目录: 一、"消息服务" 概述 :1.1 为什么要使用 "消息服务" ( 消息中间件 ) &#xff1f;① 异步处理② 应用解耦③ 流量削峰④ 分布式事务管理 1.2 常用 "消息中间件" 介绍 :ActiveMQ ( 广泛应用于中小型企业 )RabbitMQ ( 没有特别要求的场景下…...

二层交换机与路由器连通上网实验

华为二层交换机与路由器连通上网实验 二层交换机是一种网络设备&#xff0c;用于在局域网&#xff08;LAN&#xff09;中转发数据帧。它工作在OSI模型的第二层&#xff0c;即数据链路层。二层交换机通过学习和维护MAC地址表&#xff0c;实现了数据的快速转发和广播域的隔离。 实…...

AJAX知识点(前后端交互技术)

原生AJAX AJAX全称为Asynchronous JavaScript And XML,就是异步的JS和XML&#xff0c;通过AJAX可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无需刷新就可获取数据。 AJAX不是新的编程语言&#xff0c;而是一种将现有的标准组合在一起使用的新方式 …...

用wordpress为外贸进出口公司搭建多语言国际站

使用WordPress为外贸进出口公司搭建多语言国际站是一个很好的选择&#xff0c;因为WordPress不仅易于使用&#xff0c;而且具有丰富的插件和主题&#xff0c;可以支持多语言内容。以下是搭建多语言国际站的步骤和建议&#xff1a; 安装WordPress&#xff1a;首先&#xff0c;您…...

雷军-2022.8小米创业思考-6-互联网七字诀之口碑:口碑即定位,超预期才有口碑,品牌建设

第六章 互联网七字诀 专注、极致、口碑、快&#xff0c;这就是我总结的互联网七字诀&#xff0c;也是我对互联网思维的高度概括。 口碑 用户口碑是所有产品成功的关键因素&#xff0c;这是不言而喻的公理。 资源永远有限&#xff0c;对于创业公司尤其如此。只有专注&#xf…...

欧盟MDR法规对医疗器械网络安全都有哪些要求?

MDR&#xff0c;欧盟医疗器械法规&#xff08;Medical Device REGULATION (EU) 2017/745&#xff0c;简称“MDR”&#xff09;&#xff0c;当医疗器械办理欧盟CE认证时&#xff0c;需满足新法规 MDR (EU) 2017/745要求。 M DR符合性评估 医械网络安全咨询与相关文件出具&#x…...

Linux —— 信号初识

Linux —— 信号初识 什么是信号测试几个信号signal函数函数原型参数说明返回值注意事项示例 后台程序前台转后台检测输入中断向量表 我们今天来继续学习Linux的内容&#xff0c;今天我们要了解的是Linux操作系统中的信号&#xff1a; 什么是信号 信号是操作系统内核与进程之…...

webpack进阶 -- 自定义Plugin,Loader封装打包优化

介绍 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。在 Webpack 处理应用程序时&#xff0c;它会在内部构建一个依赖图(dependency graph)&#xff0c;这个依赖图对应映射到项目所需的每个模块&#xff0c;并生成一个或多个 bundle。在这个过程中…...

《Decoupled Optimisation for Long-Tailed Visual Recognition》阅读笔记

论文标题 《Decoupled Optimisation for Long-Tailed Visual Recognition》 长尾视觉识别的解耦优化 作者 Cong Cong、Shiyu Xuan、Sidong Liu、Shiliang Zhang、Maurice Pagnucco 和 Yang Song、 来自新南威尔士大学计算机科学与工程学院、北京大学计算机学院多媒体信息处…...

Springboot+Vue项目-基于Java+MySQL的毕业就业信息管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…...

条件平差——以水准网平差为例 (python详细过程版)

目录 一、原理概述二、案例分析三、代码实现四、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、原理概述 条件平差的函数模型和随机模型为: A V + W = 0...

mysql -- WITH RECURSIVE 语法

引言 在 SQL 中&#xff0c;WITH RECURSIVE 是一个用于创建递归查询的语句。它允许你定义一个 Common Table Expression (CTE)&#xff0c;该 CTE 可以引用自身的输出。递归 CTE 非常适合于查询具有层次结构或树状结构的数据&#xff0c;例如组织结构、文件系统或任何其他具有…...

洗地机什么品牌好?洗地机怎么选?618洗地机选购指南

随着科技的飞速发展&#xff0c;洗地机以其高效的清洁能力、稳定的性能和用户友好的设计而闻名&#xff0c;不仅可以高效吸尘、拖地&#xff0c;还不用手动洗滚布&#xff0c;已经逐渐成为现代家庭不可或缺的清洁助手。然而&#xff0c;在众多品牌和型号中&#xff0c;如何选择…...

nginx负载均衡配置

1.nginx负载均衡配置 upstream lbs {server 192.168.1.12:8080;server 192.168.1.12:8081; }server {listen 80;server_name localhost a.com;#charset koi8-r;#access_log logs/host.access.log main;location / {root html;index index.html index.htm;}locatio…...

HarmonyOS NEXT星河版之美团外卖点餐功能实战(中)

接上 一、UI布局 1.1 购物车Item Preview Component export struct MTCartItemView {build() {Row({ space: 6 }) {Image(https://bkimg.cdn.bcebos.com/pic/4d086e061d950a7bc94a331704d162d9f3d3c9e2).width(42).aspectRatio(1).borderRadius(5)Column({ space: 3 }) {Text…...

CTF-Web Exploitation(持续更新)

CTF-Web Exploitation 1. GET aHEAD Find the flag being held on this server to get ahead of the competition Hints Check out tools like Burpsuite to modify your requests and look at the responses 根据提示使用不同的请求方式得到response可能会得到结果 使用…...

图书管理系统c语言

创建一个图书管理系统是一个涉及数据结构和文件操作的项目。在C语言中&#xff0c;你可以使用结构体来表示图书信息&#xff0c;使用函数来实现系统的各项功能。以下是一个简单的图书管理系统的示例&#xff0c;包括基本的添加、显示、查找和删除图书的功能。 1. 定义图书结构…...

森林消防—高扬程水泵,高效、稳定、可靠!/恒峰智慧科技

森林&#xff0c;作为地球的“绿色肺叶”&#xff0c;不仅为我们提供了丰富的自然资源&#xff0c;更是维持生态平衡的重要一环。然而&#xff0c;随着全球气候的变化和人为活动的增加&#xff0c;森林火灾频发&#xff0c;给生态环境和人民生命财产安全带来了巨大威胁。在森林…...

光伏设备制造5G智能工厂数字孪生可视化平台,推进行业数字化转型

光伏设备制造5G智能工厂数字孪生可视化平台&#xff0c;推进行业数字化转型。光伏设备制造5G智能工厂数字孪生可视化平台是光伏行业数字化转型的重要一环。通过数字孪生平台&#xff0c;光伏设备制造企业可以实现对生产过程的全面监控和智能管理&#xff0c;提高生产效率&#…...

【论文阅读笔记】TS2Vec: Towards Universal Representation of Time Series

【论文阅读笔记】TS2Vec: Towards Universal Representation of Time Series 摘要 这段文字介绍了一个名为TS2Vec的通用框架&#xff0c;用于学习时间序列数据的表示&#xff0c;可以在任意语义层次上进行。与现有方法不同&#xff0c;TS2Vec通过对增强的上下文视图进行层次化…...

天津网站建设费用/萝卜建站

一、情景描述&#xff1a; 后台给一个txt文件&#xff0c;编码是utf-8,在Mac电脑Xcode开发环境下读取txt文件内容&#xff0c;汉字会出现乱码&#xff0c;英文没有乱码这种情况。 二、尝试解决方法&#xff1a; 修改编码格式&#xff0c;尝试了NSUTF16StringEncoding,NSUTF8Str…...

网上注册公司申请入口/seo怎么优化方案

我们知道 STM32 有很多寄存器&#xff0c;看起来特别费劲&#xff0c;当然如果通过前面的直接查看寄存器值的方法确实可以观察数据&#xff0c;但在这里我要介绍一个特别方便的查看方式。KEIL 集成的外设窗口&#xff08;注意这个外设串口对 STM32F4 系列支持效果并不理想&…...

做暧暧视频网站免费/优化师是做什么的

▲点击上方 雷锋网 关注华为已经宣布方舟编译器会从 2019 年全面开源。文 | I/O 2019 年 4 月 11 日&#xff0c;在上海的华为新品发布会上&#xff0c;除了可以拍月亮的华为 P30 系列&#xff0c;余承东还亲自抛出了两项软件层面的“重磅炸弹”&#xff0c;分别是方舟编译器和…...

新网 网站建立/杭州关键词优化服务

要知道 富不出三代,穷不过几年的事情并不是很多,甚至可以说很少很少, 更多时候,铁的现实是: 富人的孩子还是富人&#xff0c;穷人的孩子还是穷人。 大家不可能站在同一起跑线&#xff0c;最终也不大可能站到同一终点线上。 很多时候, 你的终点只是别人的起点! 王思聪他爸…...

简单的手机网址大全/批量优化网站软件

1、JDK &#xff08;Java Development Kit&#xff09;Java开发工具集      从初学者角度来看&#xff0c;采用JDK开发Java程序能够很快理解程序中各部分代码之间的关系&#xff0c;有利于理解Java面向对象的设计思想。JDK的另一个显著特点是随着Java &#xff08;J2EE、J2…...

安徽省政府网站建设/百度网盘首页

cocos2d-x最新支持了webp图片格式&#xff0c;google在2010年发布的这个图片格式具备比jpg和png更高的压缩比&#xff0c;并且支持alpha通道。 图片体积对比&#xff1a; 原始图片&#xff08;map_008_BG_2.png 1024*1024的一张背景图&#xff09; 大小910k 压缩为png8 369k …...