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

【JS 贪心算法常见步骤】

贪心算法是一种解决优化问题的算法,其思想是在每一步选择中选择当前状态下最优解,从而达到全局最优解的目的。

以下是贪心算法的一些常见步骤:

  1. 将问题模型化为一个包含若干子问题的问题集合,每个子问题都有一个最优解。

  2. 对于每个子问题,选择一个局部最优解,并将其合并到全局解中。

  3. 对于每个子问题,都执行步骤2,知道所有局部最优解都合并为一个全局最优解。

接下来,让我们通过一个例子来演示贪心算法。

例子:活动选择

假设有一些活动,每个活动都有一个开始时间和结束时间。你希望从这些活动中选择尽可能多的活动,以便你可以参加尽可能多的活动。但是,你不能同时参加两个活动,因为它们有冲突的时间。如何解决这个问题?

算法步骤:

  1. 将所有活动按照结束时间从早到晚排序。

  2. 从第一个活动开始,选择第一个可行的活动,也就是第一个活动的结束时间早于或等于第二个活动的开始时间。

  3. 重复步骤2,直到没有可行的活动为止。

实现:

function activitySelection(start, end) {const n = start.length;const activities = [];// 构建活动对象集合for (let i = 0; i < n; i++) {activities.push({ start: start[i], end: end[i] });}// 按照结束时间从早到晚排序activities.sort((a, b) => a.end - b.end);// 选择第一个可行的活动并加入结果集合const result = [activities[0]];let lastActivityEnd = activities[0].end;// 选择其它可行的活动并加入结果集合for (let i = 1; i < n; i++) {if (activities[i].start >= lastActivityEnd) {result.push(activities[i]);lastActivityEnd = activities[i].end;}}return result;
}// 示例
const start = [0, 1, 2, 3, 4, 5];
const end = [6, 3, 4, 5, 8, 5];
console.log(activitySelection(start, end));
// 结果:[
//   { start: 0, end: 6 },
//   { start: 3, end: 5 },
//   { start: 5, end: 5 },
//   { start: 5, end: 8 }
// ]

在上面的例子中,我们将所有活动按照结束时间排序,然后从第一个活动开始选择可行的活动并加入结果集合。这里选择的是局部最优解,即选择结束时间最早的活动。通过这种方式,我们可以得到全局最优解,即参加尽可能多的活动。

相关文章:

【JS 贪心算法常见步骤】

贪心算法是一种解决优化问题的算法&#xff0c;其思想是在每一步选择中选择当前状态下最优解&#xff0c;从而达到全局最优解的目的。 以下是贪心算法的一些常见步骤&#xff1a; 将问题模型化为一个包含若干子问题的问题集合&#xff0c;每个子问题都有一个最优解。 对于每个…...

应用案例|基于三维机器视觉的机器人纸箱拆码垛应用解决方案

Part.1 项目背景 在现代物流和制造行业中&#xff0c;纸箱的拆码垛操作是一项重要且频繁的任务。传统的纸箱拆码垛工作通常由人工完成&#xff0c;这种方式存在劳动强度大、生产效率低以及人为操作容易导致错误等问题&#xff0c;严重影响物料的安全运输和质量。为了满足物流行…...

【ARM 嵌入式 编译 Makefile 系列 10 - Makefile sort 函数详细介绍】

文章目录 Makefile 函数 sort 学习Makefile 函数 sort 学习 sort 是Makefile的一个内建函数,它用于将列表中的词进行排序,并删除重复的词。sort函数的语法如下: $(sort list)list是你想要排序的单词列表。 下面是一个使用sort函数的简单示例: FOO = c b a c b a BAR =…...

Flask下载文件报错304 NOT MODIFIED

文章目录 问题描述解决方案参考文献 问题描述 前端 Vue 下下来的文件无法正常打开&#xff0c;大小比正常的略大一点&#xff0c;通过 Postman 直接调用是正常的 解决方案 由前端解决 如果响应大小比文件略大一点&#xff0c;从 responses 中取出关键数据再组成文件如果响应…...

AI Chat 设计模式:15. 桥接模式

本文是该系列的第十五篇&#xff0c;采用问答式的方式展开&#xff0c;问题由我提出&#xff0c;答案由 Chat AI 作出&#xff0c;灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 如果你是第一次接触桥接模式&#xff0c;那么你会有哪些疑问呢&#xff1f;A.1Q.2 什…...

Python批量替换Excel和Word中的关键字

一、问题的提出 有时&#xff0c;我们手头上有多个Excel或者Word文件&#xff0c;但是领导突然要求对某几个术语进行批量的修改&#xff0c;你是不是有要崩溃的感觉。因为这么多文件&#xff0c;要一个一个地打开文件&#xff0c;再进行批量替换修改&#xff0c;几个文件还好&…...

Codeforces算法心得——A. Array Coloring

大家好&#xff0c;我是晴天学长&#xff0c;确实全世界最大的算法竞赛平台有很多独特且创新的地方&#xff0c;后面我会持续的更新的&#xff01;加油&#xff01;&#x1f4aa;&#x1f4aa;&#x1f4aa; 1 &#xff09;A. Array Coloring 2) .算法思路 数组中的奇数个数一…...

论文阅读:《Waymo Public Road Safety Performance Data》

文章目录 1 背景2 方法2.1 数据来源2.2 碰撞数据 3 碰撞事件分析4 讨论 1 背景 这篇文章是讲waymo道路安全性能数据分析的&#xff0c;主要想表达的是waymo自动驾驶系统在安全上面的出色表现&#xff0c;以向政府、大众提高自己产品的公信力。 这篇文章分析的数据是自从2019年到…...

url中的特殊符号及特殊字符编码对照表

有些符号在URL中是不能直接传递的&#xff0c;如果要在URL中传递这些特殊符号&#xff0c;那么就要使用他们的编码了。 编码的格式为&#xff1a;%加字符的ASCII码&#xff0c;即一个百分号%&#xff0c;后面跟对应字符的ASCII&#xff08;16进制&#xff09;码值。例如 空格的…...

【C++】详解用标准库的std::mt19937生成随机数

2023年8月16日&#xff0c;周三晚上 写了1个半小时 目录 概述英文文档什么是mt19937什么是状态大小头文件std::mt19937的常用成员函数1. 构造函数&#xff1a;2. 种子操作函数&#xff1a;3. 随机数生成函数&#xff1a;4. 辅助函数&#xff1a;生成种子值方法1&#xff1a;使…...

科大讯飞发布星火认知大模型2.0版——体验实测

8月15日&#xff0c;科大讯飞举行讯飞星火认知大模型V2.0升级发布会&#xff0c;对外展示其升级后的大模型代码能力和多模态能力&#xff0c;同时发布并升级搭载讯飞星火认知大模型V2.0能力的多项应用和产品。自5月6日首发以来&#xff0c;星火认知大模型经历V1.5版本的迭代&am…...

部署mysql到win10电脑上

中间出现了很多问题&#xff0c; 记录一下 我这边是去官网下载的 &#xff0c;链接&#xff1a;https://dev.mysql.com/downloads/mysql/ 我这边选了不是最新版本的MySQL&#xff0c;因为第一次安装8.1.0版本的&#xff0c;死活运行不起来&#xff0c;直接卸载安重装了&#x…...

nginx+php 出现502 bad gateway

nginxphp 出现502 bad gateway&#xff0c;一般这都不是nginx的问题&#xff0c;而是由于 fastcgi或者php的问题导致的&#xff0c;常见的有以下几种。 1. php.ini 的memory_limit 过小&#xff08;如果有个别php程序进程需要占用极大内存时这个必须注意&#xff09; 2. ph…...

基于LVQ神经网络的人脸朝向识别

1案例背景 1.1人脸识别概述 人脸识别作为一个复杂的模式识别问题,近年来受到了广泛的关注,识别领域的各种方法在这个问题上各显所长,而且发展出了许多新方法,大大丰富和拓宽了模式识别的方向。人脸识别、检测,跟踪、特征定位等技术近年来一直是研究的热点。人脸识别是人脸应用…...

Leetcode Top 100 Liked Questions(序号53~74)

53. Maximum Subarray 题意&#xff1a;一个数组&#xff0c;找到和最大的子串 我的思路 我记得好像On的动态规划来做的&#xff1f;但是想不起来了&#xff0c;先死做&#xff0c;用的前缀和——TLE超时 那就只能想想dp怎么做了 假设dp[i]表示的是以 i 为右端点的最大的…...

Rabbitmq消息不丢失

目录 一、消息不丢失1.消息确认2.消息确认业务封装2.1 发送确认消息测试2.2 消息发送失败&#xff0c;设置重发机制 一、消息不丢失 消息的不丢失&#xff0c;在MQ角度考虑&#xff0c;一般有三种途径&#xff1a; 1&#xff0c;生产者不丢数据 2&#xff0c;MQ服务器不丢数据…...

Kotlin runBlocking launch多个协程读写mutableListOf时序

Kotlin runBlocking launch多个协程读写mutableListOf时序 import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlockingfun main(args: Array<String>) {var lists mutableListOf<String>()runBlocking {launch {r…...

Spring Cloud微服务治理框架深度解析

在学习一个技术之前&#xff0c;首先我们要了解它是做什么的&#xff0c;我们为什么要用它。不然看再多资料都理解不了&#xff0c;因此我们先来讲解下Spring Cloud Spring Cloud是一套微服务治理框架&#xff0c;几乎考虑到了微服务治理的方方面面。那么接下来具体说下 Spring…...

设计模式之原型模式Prototype的C++实现

1、原型模式提出 在软件功能设计中&#xff0c;经常面临着“某些结构复杂的对象”的创建工作&#xff0c;且创建的对象想拥有其他对象在某一刻的状态&#xff0c;则可以使用原型模型。原型模型是通过拷贝构造函数来创建对象&#xff0c;并且该对象拥有其他对象在某一刻的状态。…...

Java 中操作 Redis

文章目录 一、Redis 常用数据类型二、Redis 常用操作命令1. 字符串命令2. 哈希命令3. 列表命令4. 集合命令5. 有序集合命令6. 通用命令 三、在 Java 中操作 Redis1. 导入 maven 坐标2. 配置 Redis 数据源3. 编写配置类 四、在代码中的具体使用 一、Redis 常用数据类型 Redis 存…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...

Appium下载安装配置保姆教程(图文详解)

目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...

python打卡第47天

昨天代码中注意力热图的部分顺移至今天 知识点回顾&#xff1a; 热力图 作业&#xff1a;对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图&#xff0c;展示模…...

深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”

深入浅出JavaScript中的ArrayBuffer&#xff1a;二进制数据的“瑞士军刀” 在JavaScript中&#xff0c;我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时&#xff0c;单纯依赖字符串或数组就显得力不从心了。这时&#xff…...