貪心演算法例項彙總(分糖果 加油站 面試排程)

2021-10-05 19:52:05 字數 2701 閱讀 9462

大多數演算法都是基於四種演算法

(1)貪心演算法;

(2)分而治之演算法(遞迴思想);

(3)動態規劃

(4)暴力法(窮舉思想)

貪心演算法核心思想:區域性最優——>整體最優

對於乙個複雜問題,如果暫時找不到全域性最優解,就可以先把原問題拆成幾個小問題(分而治之),分別求每個小問題的最優解,再把「區域性最優解」疊加起來,就當做整個問題的整體最優解。

老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。

你需要按照以下要求,幫助老師給這些孩子分發糖果:

每個孩子至少分配到 1 個糖果。

相鄰的孩子中,評分高的孩子必須獲得更多的糖果。

那麼這樣下來,老師至少需要準備多少顆糖果呢?

示例 1:

輸入: [1,0,2]

輸出: 5

解釋: 你可以分別給這三個孩子分發 2、1、2 顆糖果。

示例 2:

輸入: [1,2,2]

輸出: 4

解釋: 你可以分別給這三個孩子分發 1、2、1 顆糖果。

第三個孩子只得到 1 顆糖果,這已滿足上述兩個條件。

【思路】正序遍歷+逆序遍歷

class

solution

}//逆序遍歷得區域性最優解 並考慮疊加

for(

int i=len-

1;i>

0;i--)}

int res =0;

for(

int i=

0;i)return res;

}}

——兩個區域性最優疊加為全域性最優解!

在一條環路上有 n 個加油站,其中第 i 個加油站有汽油 gas[i] 公升。

你有一輛油箱容量無限的的汽車,從第 i 個加油站開往第 i+1 個加油站需要消耗汽油 cost[i] 公升。你從其中的乙個加油站出發,開始時油箱為空。

如果你可以繞環路行駛一周,則返回出發時加油站的編號,否則返回 -1。

說明:

如果題目有解,該答案即為唯一答案。

輸入陣列均為非空陣列,且長度相同。

輸入陣列中的元素均為非負數。

示例 1:

輸入:gas = [1,2,3,4,5]

cost = [3,4,5,1,2]

輸出: 3

解釋:

從 3 號加油站(索引為 3 處)出發,可獲得 4 公升汽油。此時油箱有 = 0 + 4 = 4 公升汽油 開往 4 號加油站,此時油箱有 4 - 1 + 5 = 8 公升汽油 開往 0 號加油站,此時油箱有 8 - 2 + 1 = 7 公升汽油 開往 1 號加油站,此時油箱有 7 - 3 + 2 = 6 公升汽油 開往 2 號加油站,此時油箱有 6 - 4 + 3 = 5 公升汽油 開往 3 號加油站,你需要消耗 5

公升汽油,正好足夠你返回到 3 號加油站。 因此,3 可為起始索引。

示例 2:

輸入:gas = [2,3,4]

cost = [3,4,3]

輸出: -1

解釋: 你不能從 0 號或 1 號加油站出發,因為沒有足夠的汽油可以讓你行駛到下乙個加油站。 我們從 2 號加油站出發,可以獲得 4公升汽油。 此時油箱有 = 0 + 4 = 4 公升汽油 開往 0 號加油站,此時油箱有 4 - 3 + 2 = 3 公升汽油 開往 1號加油站,此時油箱有 3 - 3 + 3 = 3 公升汽油 你無法返回 2 號加油站,因為返程需要消耗 4 公升汽油,但是你的油箱只有 3公升汽油。 因此,無論怎樣,你都不可能繞環路行駛一周。

class

solution}if

(total>=0)

else

}}

公司計畫面試 2n 人。第 i 人飛往 a 市的費用為 costs[i][0],飛往 b 市的費用為 costs[i][1]。

返回將每個人都飛到某座城市的最低費用,要求每個城市都有 n 人抵達。

示例:

輸入:[[10,20],[30,200],[400,50],[30,20]]

輸出:110

解釋:第乙個人去 a 市,費用為 10。

第二個人去 a 市,費用為 30。

第三個人去 b 市,費用為 50。

第四個人去 b 市,費用為 20。

最低總費用為 10 + 30 + 50 + 20 = 110,每個城市都有一半的人在面試。

1 <= costs.length <= 100

costs.length 為偶數

1 <= costs[i][0], costs[i][1] <= 1000

class

solution

arrays.

sort

(chazhi)

;for

(int i=

0;i2;i++

)return res;

}}

加油站(貪心演算法)

一輛汽車加滿油後可行駛n公里。旅途中有若干個加油站。設計乙個有效演算法,指出應 在哪些加油站停靠加油,使沿途加油次數最少。對於給定的n n 5000 和k k 1000 個加油站位置,程式設計計算最少加油次數。並證明演算法能產生乙個最優解。要求 輸入 第一行有2個正整數n和k,表示汽車加滿油後可行駛...

汽車加油問題 貪心演算法

問題描述 一輛汽車加滿油後可行駛 nkm 旅途中有若干個加油站。設計乙個有效演算法,指出應在哪些加油站停靠加油,使沿途加油次數最少。程式設計任務 對於給定的n和k 個加油站位置,程式設計計算最少加油次數。資料輸入 第1行有 2個正整數n和 k,表示汽車加滿油後可行駛 nkm,且旅途有 k個加油站。接...

汽車加油問題(貪心演算法)

汽車加油問題 time limit 1000 ms memory limit 65536 kib problem description 一輛汽車加滿油後可行駛n公里。旅途中有若干個加油站。設計乙個有效演算法,指出應在哪些加油站停靠加油,使沿途加油次數最少。並證明演算法能產生乙個最優解。對於給定的n...