成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

分發(fā)餅干,也要貪心

開(kāi)發(fā) 前端
文中詳細(xì)介紹了思考的過(guò)程,想清楚局部最優(yōu),想清楚全局最優(yōu),感覺(jué)局部最優(yōu)是可以推出全局最優(yōu),并想不出反例,那么就試一試貪心。

[[434135]]

分發(fā)餅干

力扣題目鏈接:https://leetcode-cn.com/problems/assign-cookies

假設(shè)你是一位很棒的家長(zhǎng),想要給你的孩子們一些小餅干。但是,每個(gè)孩子最多只能給一塊餅干。

對(duì)每個(gè)孩子 i,都有一個(gè)胃口值 g[i],這是能讓孩子們滿(mǎn)足胃口的餅干的最小尺寸;并且每塊餅干 j,都有一個(gè)尺寸 s[j] 。如果 s[j] >= g[i],我們可以將這個(gè)餅干 j 分配給孩子 i ,這個(gè)孩子會(huì)得到滿(mǎn)足。你的目標(biāo)是盡可能滿(mǎn)足越多數(shù)量的孩子,并輸出這個(gè)最大數(shù)值。

示例 1:

  • 輸入: g = [1,2,3], s = [1,1]
  • 輸出: 1 解釋:你有三個(gè)孩子和兩塊小餅干,3個(gè)孩子的胃口值分別是:1,2,3。雖然你有兩塊小餅干,由于他們的尺寸都是1,你只能讓胃口值是1的孩子滿(mǎn)足。所以你應(yīng)該輸出1。

示例 2:

  • 輸入: g = [1,2], s = [1,2,3]
  • 輸出: 2
  • 解釋:你有兩個(gè)孩子和三塊小餅干,2個(gè)孩子的胃口值分別是1,2。你擁有的餅干數(shù)量和尺寸都足以讓所有孩子滿(mǎn)足。所以你應(yīng)該輸出2.

提示:

  • 1 <= g.length <= 3 * 10^4
  • 0 <= s.length <= 3 * 10^4
  • 1 <= g[i], s[j] <= 2^31 - 1

思路

為了了滿(mǎn)足更多的小孩,就不要造成餅干尺寸的浪費(fèi)。

大尺寸的餅干既可以滿(mǎn)足胃口大的孩子也可以滿(mǎn)足胃口小的孩子,那么就應(yīng)該優(yōu)先滿(mǎn)足胃口大的。

這里的局部最優(yōu)就是大餅干喂給胃口大的,充分利用餅干尺寸喂飽一個(gè),全局最優(yōu)就是喂飽盡可能多的小孩。

可以嘗試使用貪心策略,先將餅干數(shù)組和小孩數(shù)組排序。

然后從后向前遍歷小孩數(shù)組,用大餅干優(yōu)先滿(mǎn)足胃口大的,并統(tǒng)計(jì)滿(mǎn)足小孩數(shù)量。

如圖:

分發(fā)餅干

這個(gè)例子可以看出餅干9只有喂給胃口為7的小孩,這樣才是整體最優(yōu)解,并想不出反例,那么就可以擼代碼了。

C++代碼整體如下:

  1. // 時(shí)間復(fù)雜度:O(nlogn) 
  2. // 空間復(fù)雜度:O(1) 
  3. class Solution { 
  4. public
  5.     int findContentChildren(vector<int>& g, vector<int>& s) { 
  6.         sort(g.begin(), g.end()); 
  7.         sort(s.begin(), s.end()); 
  8.         int index = s.size() - 1; // 餅干數(shù)組的下表 
  9.         int result = 0; 
  10.         for (int i = g.size() - 1; i >= 0; i--) { 
  11.             if (index >= 0 && s[index] >= g[i]) { 
  12.                 result++; 
  13.                 index--; 
  14.             } 
  15.         } 
  16.         return result; 
  17.     } 
  18. }; 

從代碼中可以看出我用了一個(gè)index來(lái)控制餅干數(shù)組的遍歷,遍歷餅干并沒(méi)有再起一個(gè)for循環(huán),而是采用自減的方式,這也是常用的技巧。

有的同學(xué)看到要遍歷兩個(gè)數(shù)組,就想到用兩個(gè)for循環(huán),那樣邏輯其實(shí)就復(fù)雜了。

也可以換一個(gè)思路,小餅干先喂飽小胃口。

代碼如下:

  1. class Solution { 
  2. public
  3.     int findContentChildren(vector<int>& g, vector<int>& s) { 
  4.         sort(g.begin(),g.end()); 
  5.         sort(s.begin(),s.end()); 
  6.         int index = 0; 
  7.         for(int i = 0;i < s.size();++i){ 
  8.             if(index < g.size() && g[index] <= s[i]){ 
  9.                 index++; 
  10.             } 
  11.         } 
  12.         return index
  13.     } 
  14. }; 

總結(jié)

這道題是貪心很好的一道入門(mén)題目,思路還是比較容易想到的。

文中詳細(xì)介紹了思考的過(guò)程,想清楚局部最優(yōu),想清楚全局最優(yōu),感覺(jué)局部最優(yōu)是可以推出全局最優(yōu),并想不出反例,那么就試一試貪心。

本文轉(zhuǎn)載自微信公眾號(hào)「代碼隨想錄」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系代碼隨想錄公眾號(hào)。

 

 

責(zé)任編輯:武曉燕 來(lái)源: 代碼隨想錄
相關(guān)推薦

2015-07-27 09:57:47

iOS捆綁應(yīng)用

2013-09-17 09:33:11

Atom22nmTick-Tock

2010-01-12 10:47:16

IT從業(yè)人員

2020-04-06 13:50:43

數(shù)據(jù)安全大數(shù)據(jù)5G

2013-02-28 09:24:51

AMD軟件公司NVIDIA

2021-10-12 08:43:20

排列回溯算法

2010-08-06 10:24:56

Flex事件分發(fā)

2010-08-26 15:54:06

2021-01-18 05:33:08

機(jī)器學(xué)習(xí)前端算法

2020-02-17 10:34:04

箭頭函數(shù)開(kāi)發(fā) JavaScript

2021-01-11 05:18:11

機(jī)器學(xué)習(xí)

2021-05-12 06:28:09

AI人工智能

2009-10-21 10:25:35

數(shù)據(jù)中心布線系統(tǒng)

2010-11-24 10:41:32

2022-07-07 08:30:50

類(lèi)型注解原生JS

2010-12-15 12:43:35

網(wǎng)絡(luò)管理

2010-07-01 16:27:50

標(biāo)簽分發(fā)協(xié)議

2022-12-02 14:12:52

新能源汽車(chē)海爾

2023-10-08 08:23:44

Android事件邏輯

2021-09-29 07:41:27

前端技術(shù)編程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 中文字幕亚洲欧美日韩在线不卡 | 成人精品视频在线 | 日韩高清一区二区 | 日韩欧美国产精品一区二区三区 | 日日操操 | 亚洲精品一 | 中文字幕一区二区三区在线乱码 | 久久久久久久电影 | 国产一区二区精品在线观看 | 国产在线视频三区 | 欧美中文字幕一区 | www国产成人免费观看视频 | 精品一区二区三区中文字幕 | 久久激情网 | 亚洲成人福利视频 | 免费黄色成人 | 干干干操操操 | 久久机热| 天堂色区| 91免费看片| 性欧美xxxx | 久久久久久免费免费 | 狠狠婷婷综合久久久久久妖精 | 日韩欧美在线观看 | 精品国产一区二区三区久久 | 日本中文字幕在线观看 | 天色综合网| 春色av| 日韩精品二区 | 亚洲黄色av网站 | 少妇一区二区三区 | 国产在线一区二区三区 | 午夜看片网站 | 在线视频中文字幕 | 自拍偷拍小视频 | 国产人成精品一区二区三 | 欧美精品在线免费 | 久久精品免费一区二区三 | av中文字幕在线 | 久久久国产一区二区三区四区小说 | 成人久久一区 |