贪心:assign cookies分糖果
贪心算法的核心:
遵循某种规律,使用最少的资源来完成目标
所以在了解贪心算法的时候需要明确两点
- 寻找共有的规律
- 每一步的迭代使用最优的策略(消耗最少的资源)
问题如下:
已知一些孩子和一些糖果,每个孩子有需求因子g,每个糖果有大小s,当 某个糖果的大小s >= 某个孩子的需求因子g时,代表该糖果可以满足该孩子;求使用这 些糖果,最多能满足多少孩子?(注意,某个孩子最多只能用1个糖果满足)
类似:g = [2, 5, 9, 9, 10, 15] ,糖果大小:s = [1, 3, 6, 8, 20]
根据贪心算法的核心分析:
规律
假如糖果大小不满足一个孩子的需求因子,则比该需求因子更小的都不会被满足
使用最小的糖果能够满足孩子,则可以留下较大的糖果满足更高需求因子的孩子迭代策略
使用较小的糖果满足来满足较小需求因子的孩子
实现如下(文末有完整测试代码):
/*
需要注意:一个糖果满足了一个孩子之后就不能满足其他的孩子了
*/
int allocate_num(vector<int> &child, vector<int> &candy) {if(child.size() == 0 || candy.size() == 0) {return 0;}/*根据规律,调整糖果大小和需求因子的序列*/sort(child.begin(),child.end()); sort(candy.begin(),candy.end());int child_num = 0;int candy_num = 0;/*迭代策略:只有糖果大小 >= 孩子的需求因子之后才能算满足*/while(child_num < child.size() && candy_num < candy.size()) {if(candy[candy_num] >= child[child_num]) {child_num ++;}candy_num ++;}/*返回可以分配给孩子的数量*/return child_num;
}
测试代码如下:
#include <iostream>
#include <algorithm>
#include <vector>using namespace std;int allocate_num(vector<int> &child, vector<int> &candy) {if(child.size() == 0 || candy.size() == 0) {return 0;}sort(child.begin(),child.end());sort(candy.begin(),candy.end());int child_num = 0;int candy_num = 0;while(child_num < child.size() && candy_num < candy.size()) {if(candy[candy_num] >= child[child_num]) {child_num ++;}candy_num ++;}return child_num;
}int main() {vector<int> child;vector<int> candy;int tmp_child;int tmp_candy;cout << "input child " << endl;for (int i = 0;i < 5; ++i) {cin >> tmp_child;child.push_back(tmp_child);}cout << "input candy " << endl;for (int i = 0;i < 5; ++i) {cin >> tmp_candy;candy.push_back(tmp_candy);}cout << "the num of child can be allocate is " << allocate_num(child,candy) << endl;return 0;
}
输入输出如下:
input child
2 5 9 9 10
input candy
1 3 6 8 20
the num of child can be allocate is 3
相关文章:

mimo系统matlab,OFDM—MIMO系统的matlab程序
【实例简介】MIMO OFDM Simulator:OFDM.m: OFDM Simulator (outer function)create_channel.m: Generates a Rayleigh fading frequency-selective channel, parametrized by the antenna configuration, the OFDM configuration, and the power-delay profile.svd_decompose_c…

软件行业项目经理主要的职责是什么?(转)
项目经理职责:1、 基本职责就是确保项目目标的实现,领导项目团队准时、优质地完成全部工作。2、 与客户沟通,了解项目的整体需求。并与客户保持一定的联系,即时反馈阶段性的成果,和即时更改客户提出的合理需求。3、 制…

android interview 1
1. 请描述下Activity的生命周期。 必调用的三个方法:onCreate() --> onStart() --> onResume(),用AAA表示(1)父Activity启动子Activity,子Actvity退出,父Activity调用顺序如下AAA --> onF…

Spring Boot 的 10 个核心模块
学习 Spring Boot 必须得了解它的核心模块,和 Spring 框架一样,Spring Boot 也是一个庞大的项目,也是由许多核心子模块组成的。 你所需具备的基础 告诉你,Spring Boot 真是个牛逼货!Spring Boot 核心配置文件详解Sprin…

贪心:Wiggle Subsequence 摇摆序列
一个整数序列,如果两个相邻元素的差恰好正负(负正)交替出现,则该序列被称为 摇摆序列。一个小于2个元素的序列直接为摇摆序列。给一个随机序列,求这个序列满足摇摆序列定义的最长子序列的长度: 输入[1,17,5,10,13,15,10,5,16,8]&…

php 腾讯云实时音视频,腾讯云视频 -实时音视频学习日志
1、实时音视频功能h5只支持ios2、不能主动拉人建群3、pc端的demo研究整体流程可以按照腾讯音视频上面指导的步骤走,申请账号,创建应用,购买套餐。购买好套餐后然后记录sdkappid、accountType。下载密钥。在开发辅助里面有个签名(UserSig)生成…

juery mobile select下来菜单选项提交form问题
注意: data-native-menu"false" 虽然具有渲染作用,但是无法进行js提交。 <script type"text/javascript"> $(function() { $("#category").change(function() { loadData(); }); }); function loadData(){ documen…

android GridView item中组件获取焦点
2019独角兽企业重金招聘Python工程师标准>>> 项目中在使用GridView控件时,里面的item有imageView、buttion等子控件。 但是GridView默认焦点是让item获取焦点,所以要使子控件获取焦点的话,要在gridview的属性中设置: …

Login failed for user 'NT AUTHORITY\SYSTEM'. 原因: 无法打开明确指定的数据库。异常处理...
公司一台SQL Server服务器一直报 "Login failed for user NT AUTHORITY\SYSTEM. 原因: 无法打开明确指定的数据库。"错误,按网上所讲的正常的处理方式都没有解决。 最后是发现一个公司内部人员写的服务造成的,将服务停用即可。转载于:https://…

n-netstat 查看网络状态命令
文章目录前言语法格式输出含义使用实例列出端口占用情况 (包括监听和未监听的)列出所有处于监听状态的 Sockets显示每个协议的统计信息在 netstat 输出中显示 PID 和进程名称在 netstat 输出中不显示主机,端口和用户名 (host, port or user)持续输出 netstat 信息显…

php win memcached 5.4,CentOS 5.4下Memcache的安装步骤(Linux+Nginx+PHP+Memcached) 电脑维修技术网...
一、源码包准备服务器端主要是安装memcache服务器端,目前的最新版本是 memcached-v1.4.4 。下载:http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz另外,Memcache用到了libevent这个库用于Socket的处理,所以还需要安…

LomoX 桌面UI框架更新,增加资源管理
修改: 1.增加lxoption工具类,提供启动的兼容,兼容旧版的,并支持注册资源启动 (蔡东赟)兼容启动项目:main.lx //资源包默认现在用 qrc:/pack/main.html 后面评估,或者等编辑器出来mai…

Python 数据类型:列表
一、列表介绍 1. 列表可以存储一系列的值,使用中括号来定义,每个元素之间用逗号隔开,形如 [a, b, c, d]2. 列表与元组的区别是:列表中的元素是可变的,元组中的元素是不可变的 In [1]: list1 [] # 定义一个空列…

贪心:remove K digits移除K个数字
问题描述: 已知一个使用字符串表示的非负整数num,将num中的k个数字移 除,求移除k个数字后,可以获得的最小的可能的新数字。 例如:num “1432219” , k 3 在去掉3个数字后得到的很多很多可能里,如1432、43…

oracle 分组排序 update,oracle分组排序
oracle 分组排序:这个麻烦:SELECT * FROM (SELECT deptno,ename,sal,ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC ) Top3 FROM emp)WHERE Top3 < 3开窗函数也ok:代码简单点:where 11 and status2JOIN( select p…

QLocalServer与QLocalSocket进程通讯
在Qt中,提供了多种IPC方法,作者所用的是QLocalServer和QLocalSocket。看起来好像和Socket搭上点边,实则底层是windows的name pipe。这应该是支持双工通信的。一 QLocalServer#ifndef VXMAINWINDOW_H#define VXMAINWINDOW_H#include <QWidg…

JDBC编程步骤
JDBC编程步骤 JDBC编程大致按如下步骤进行: (1)加载数据库驱动。通常我们使用Class类的forName静态方法来加载驱动。例如如下代码: Class.forName(driverClass) driverClass就是数据库驱动类所对应的字符串 例如加载…

(13)中值滤波和双边滤波
其实中值滤波,就是那九个数值,进行排序,选择中间的数值来代替那九个数的中间位置的值,然后再从左到右,从上到下,这样移动运算 下面是均值滤波和高斯滤波的基础知识 中值滤波基础知识 运用中值滤波&a…

贪心:Jump Game 跳跃游戏
一个数组存储了非负整型数据,数组中的第i个元素a[i],代表了可以从数组第i个 位置最多向前跳跃a[i]步;已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置,返回是true或者false判断是否能够跳跃到…

MFC之按键消息(长按处理)
想要实现长按键的一些控制,查了查可以通过捕获键盘事件,然后处理按键时需要进行的操作。下面简单的实现左右按键界面更新数值加减。 1. 重载PreTranslateMessage(MSG* pMsg)函数,在函数中捕获键盘事件并处理响应: BOOL CEditTestD…

服务器oracle11g卸载,卸载Oracle11g步骤详解
卸载Oracle11g步骤详解用Oracle自带的卸载程序不能从根本上卸载Oracle,从而为下次的安装留下隐患,那么怎么才能完全卸载Oracle呢?那就是直接注册表清除,步骤如下:1、 开始->设置->控制面板…

Fedora下配置网卡
第一次在fedora下配置静态网卡,首先去网络管理里面添加并设置网卡的IP,子网掩码和默认网关出口,然后保存即可, 也可以在 /etc/sysconfig/network-scripts/ifcfg-eth0 中直接添加这些信息,对应的为网卡的IP,…

echarts相关设置
1.显示隐藏工具栏 注释toolbox即可 /* toolbox: {show : true,feature : {dataView : {show: true, readOnly: false},magicType : {show: true, type: [line, bar]},restore : {show: true},saveAsImage : {show: true}}},*/ 2.鼠标划过数据显示对应的数据 tooltip : {trig…

贪心:jump 游戏(获取最少跳跃的次数以及跳跃路径)
一个数组存储了非负整型数据,数组中的第i个元素a[i],代表了可以从数组第i个 位置最多向前跳跃a[i]步;已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置,返回最少跳跃的次数以及跳跃过程的路径&…

ADO.NET事务
在发布System.Transaction命名空间之前,可以直接用ADO.NET创建事务,也可以通过组件、特性和COM运行库(位于System.EnterpriseServices命名空间中)进行事务处理。本文如题所示,介绍在这些传统事务处理方式中较为简单的“…

oracle表中怎么去重复,oracle去掉表重复数据
今天在做项目过程中,碰到数据库表存在重复记录,显示的时候需要去掉重复的数据。想了老半天,最终用rank() over (partition by 分组字段 order by 排序字段 顺序)解决了此问题。一、首先介绍下rank() over (partition by 分组字段 order by 排…

JavaIO操作(1)字节流和字符流-1
3.2、字节流和字符流(核心) 使用File类执行的所有操作都是针对于文件本身,但是却没有针对于文件的内容,而要进行文件内容操作就需要通过Java之中提供的两组类完成: 字节操作流(是在JDK 1.0的时候定义的&am…

7min到40s:SpringBoot 启动优化实践
然后重点排查这些阶段的代码。先看下。

SpringBoot系列教程之Bean之指定初始化顺序的若干姿势
之前介绍了@Order注解的常见错误理解,它并不能指定 bean 的加载顺序,那么问题来了,如果我需要指定 bean 的加载顺序,那应该怎么办呢?本文将介绍几种可行的方式来控制 bean 之间的加载顺序。

在Java中使用WebSocket
WebSocket是一种协议,用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接,这使得Web应用程序可以更加实时地传递数据。WebSocket协议最初由W3C开发,并于2011年成为标准。