12.15 135.
12.21 435.
假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。但是,每個孩子最多只能給一塊餅乾。
對每個孩子 i,都有乙個胃口值 g[i],這是能讓孩子們滿足胃口的餅乾的最小尺寸;並且每塊餅乾 j,都有乙個尺寸 s[j] 。如果 s[j] >= g[i],我們可以將這個餅乾 j 分配給孩子 i ,這個孩子會得到滿足。你的目標是盡可能滿足越多數量的孩子,並輸出這個最大數值。
示例 1:
輸入: g = [1,2,3], s = [1,1]
輸出: 1
解釋:你有三個孩子和兩塊小餅乾,3個孩子的胃口值分別是:1,2,3。
雖然你有兩塊小餅乾,由於他們的尺寸都是1,你只能讓胃口值是1的孩子滿足。
所以你應該輸出1。
示例 2:
輸入: g = [1,2], s = [1,2,3]
輸出: 2
解釋:你有兩個孩子和三塊小餅乾,2個孩子的胃口值分別是1,2。
你擁有的餅乾數量和尺寸都足以讓所有孩子滿足。
所以你應該輸出2.
**:
class
solution
return g1;}}
;
標頭檔案:#include
記住:using
namespace std;
定義:1.vector<
int>g;vector<
int>
& g;
2.vector
v3(n,val)
//v3中有n個重複的元素,每個元素的值都是val
3.int arr[5]
=;vector<
int>
v5(arr,
&arr[5]
);//以區間[beg;end)做為初值的vector;
//另arr可以寫成&arr[0]
輸入:g.
push_back()
;排序:sort(g.
begin()
,g.end
());
輸出:for(int i=
0;isize
();i++)
標頭檔案:#include
//數值計算庫
對vector累加求和
1.int sum =
accumulate
(vec.
begin()
, vec.
end(),
42);//42為起始值
2.string sum =
accumulate
(v.begin()
, v.
end(),
string
(" "))
;//空格為起始值
老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。
你需要按照以下要求,幫助老師給這些孩子分發糖果:
每個孩子至少分配到 1 個糖果。
相鄰的孩子中,評分高的孩子必須獲得更多的糖果。
那麼這樣下來,老師至少需要準備多少顆糖果呢?
示例 1:
輸入: [1,0,2]
輸出: 5
解釋: 你可以分別給這三個孩子分發 2、1、2 顆糖果。
示例 2:
輸入: [1,2,2]
輸出: 4
解釋: 你可以分別給這三個孩子分發 1、2、1 顆糖果。
第三個孩子只得到 1 顆糖果,這已滿足上述兩個條件。
**:
class
solution
vector<
int>
num(size,1)
;for
(int i=
1;i++i)
}for
(int i=size-
1;i>0;
--i)
}return
accumulate
(num.
begin()
,num.
end(),
0);}
};
for迴圈裡,因為是比較,不是讀取,i從1開始。
++i 和 i++ 區別在於:++i 返回加1之後的值,i++返回之前的值。
給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。
注意:
可以認為區間的終點總是大於它的起點。
區間 [1,2] 和 [2,3] 的邊界相互「接觸」,但沒有相互重疊。
示例 1:
輸入: [ [1,2], [2,3], [3,4], [1,3] ]
輸出: 1
解釋: 移除 [1,3] 後,剩下的區間沒有重疊。
示例 2:
輸入: [ [1,2], [1,2], [1,2] ]
輸出: 2
解釋: 你需要移除兩個 [1,2] 來使剩下的區間沒有重疊。
示例 3:
輸入: [ [1,2], [2,3] ]
輸出: 0
解釋: 你不需要移除任何區間,因為它們已經是無重疊的了。
**:
class
solution
int n=intervals.
size()
;sort
(intervals.
begin()
,intervals.
end(),
(vector<
int>a,vector<
int>b));
int total=
0,prev=intervals[0]
[1];
for(
int i=
1;i++i)
else
}return total;}}
;
與lambda連用:sort(intervals.begin(),intervals.end(),(vectora,vectorb),,
};sort
(students.
begin()
, students.
end(),
(student& a, student& b)
->
bool
);
return前多了乙個 -> ,多了乙個bool宣告。
下面是乙個合法的lambda表示式:
[=]
(int x,
int y)
->
bool
;
lambda 表示式的定義形式如下:
[外部變數訪問方式說明符]
(參數列)
-> 返回值型別
其中,「外部變數訪問方式說明符」可以是=或&,表示{}中用到的、定義在{}外面的變數在{}中是否允許被改變。=表示不允許,&表示允許。當然,在{}中也可以不使用定義在外面的變數。「-> 返回值型別」可以省略。 貪心演算法(leetcode)
1 分糖果 455 用最小的糖果大小滿足需求最小的孩子 class solution else return count 2 搖擺序列 376 遍歷一次,儲存乙個狀態,如果狀態為上公升,變為下降,則長度 1,下降變上公升 1 class solution def wigglemaxlength se...
leetcode 貪心演算法
貪心演算法中,是以自頂向下的方式使用最優子結構,貪心演算法會先做選擇,在當時看起來是最優的選擇,然後再求解乙個結果的子問題。貪心演算法是使所做的選擇看起來都是當前最佳的,期望通過所做的區域性最優選擇來產生乙個全域性最優解 如最小生成樹 dijkstra單源最短路徑 貪心選擇性質 所謂貪心選擇性質是指...
LeetCode 貪心演算法
保證每次操作都是區域性最優的,並且最後得到的結果是全域性最優的。455.分發餅乾 題目描述 每個孩子都有乙個滿足度,每個餅乾都有乙個大小,只有餅乾的大小大於等於乙個孩子的滿足度,該孩子才會獲得滿足。求解最多可以獲得滿足的孩子數量。示例 輸入 1,2,3 1,1 輸出 1 解釋 你有三個孩子和兩塊小餅...