1 分糖果 455
用最小的糖果大小滿足需求最小的孩子
class solution else
}return count;}};
2 搖擺序列 376
遍歷一次,儲存乙個狀態,如果狀態為上公升,變為下降,則長度+1,下降變上公升+1
class solution:
def wigglemaxlength(self, nums):
""":type nums: list[int]
:rtype: int
"""if len(nums) < 2:
return len(nums)
up = 1
begin = 0
down = 2
length = 1
state = begin;
for i in range(1, len(nums)):
if state == begin:
if nums[i] > nums[i-1]:
state = up
length += 1
elif nums[i] < nums[i-1]:
state = down
length += 1
else:
state = begin
elif state == up:
if nums[i] >= nums[i-1]:
state = up
elif nums[i] < nums[i-1]:
state = down
length += 1
elif state == down:
if nums[i] > nums[i-1]:
state = up
length += 1
else:
state = down
return length
3 移除k個數字 402
問題:求移除k個數字後能夠獲得的最小的可能的新數字
思路:例如 1432219 從高位開始遍歷 如果高位值比低位值大的話說明需要去掉
遍歷字串,用乙個棧來儲存需要保留的元素,如果棧頂元素》新元素 需要pop 還有2個特殊情況,如果棧為空,且新元素為0則不要他了,第二個如果 遍歷完k仍然大於0 比如12345 則把後面的元素去掉就行了
class solution:
def removekdigits(self, num, k):
""":type num: str
:type k: int
:rtype: str
"""stack =
for i in range(len(num)):
while stack and int(stack[-1]) > int(num[i]) and k > 0:
stack.pop()
k -= 1
if num[i] != '0' or len(stack)!= 0:
while k > 0 and stack:
stack.pop()
k -= 1
return ''.join(stack) if stack else '0'
4 跳躍遊戲 55
題目:乙個陣列a中每乙個元素儲存了可以從當前位置向後跳a[i] 步 ,能否從0跳到最後
max_index為能到達的最遠位置,jump為當前所處位置,如果jump& nums)
int cur_max_index = nums[0];//當前可達到的最遠位置
int every_max_index = nums[0]; //遍歷各個位置過程中,能達到的最遠位置
int jump = 1;
for(int i = 0;icur_max_index)
if(every_max_index6 射擊氣球 452
題目:給定x軸上,給定幾個氣球位置, 最少需要幾個弓箭手把氣球射爆
思路:把座標按左值進行排序,維護乙個射擊區間,遍歷過程中,如果有交集則 更新射擊區間,不行就加弓箭手
bool cmp(const pair&a, const pair&b)
class solution
sort(points.begin(), points.end(), cmp);
int shot_begin = points[0].first;
int shot_end = points[0].second;
int shooter = 1;
for(int i =1; i< points.size();i++)
}else
}return shooter;}};
7 最低加油次數 871
思路:把target加入到加油站中,遍歷加油站,每次判斷能不能到達下乙個加油站,一直維持加油陣列,如果不能到達下乙個加油站,就選擇其中乙個最多油的地方加油
class solution:
def minrefuelstops(self, target, startfuel, stations):
""":type target: int
:type startfuel: int
:type stations: list[list[int]]
:rtype: int
"""if len(stations) == 0:
return 0 if startfuel >= target else -1
pre_station = 0
qiyou =
ret = 0
cur_qiyou = startfuel
for i in range(len(stations)):
dis = stations[i][0] - pre_station
while(qiyou and cur_qiyou < dis):
cur_qiyou += max(qiyou)
qiyou.remove(max(qiyou))
ret += 1
if(len(qiyou) == 0 and cur_qiyou < dis):
return -1
cur_qiyou -= dis
pre_station = stations[i][0]
return ret
LeetCode 貪心演算法
12.15 135.12.21 435.假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。但是,每個孩子最多只能給一塊餅乾。對每個孩子 i,都有乙個胃口值 g i 這是能讓孩子們滿足胃口的餅乾的最小尺寸 並且每塊餅乾 j,都有乙個尺寸 s j 如果 s j g i 我們可以將這個餅乾 j 分配給孩...
leetcode 貪心演算法
貪心演算法中,是以自頂向下的方式使用最優子結構,貪心演算法會先做選擇,在當時看起來是最優的選擇,然後再求解乙個結果的子問題。貪心演算法是使所做的選擇看起來都是當前最佳的,期望通過所做的區域性最優選擇來產生乙個全域性最優解 如最小生成樹 dijkstra單源最短路徑 貪心選擇性質 所謂貪心選擇性質是指...
LeetCode 貪心演算法
保證每次操作都是區域性最優的,並且最後得到的結果是全域性最優的。455.分發餅乾 題目描述 每個孩子都有乙個滿足度,每個餅乾都有乙個大小,只有餅乾的大小大於等於乙個孩子的滿足度,該孩子才會獲得滿足。求解最多可以獲得滿足的孩子數量。示例 輸入 1,2,3 1,1 輸出 1 解釋 你有三個孩子和兩塊小餅...