大多數演算法都是基於四種演算法:
(1)貪心演算法;
(2)分而治之演算法(遞迴思想);
(3)動態規劃
(4)暴力法(窮舉思想)
貪心演算法核心思想:區域性最優——>整體最優
對於乙個複雜問題,如果暫時找不到全域性最優解,就可以先把原問題拆成幾個小問題(分而治之),分別求每個小問題的最優解,再把「區域性最優解」疊加起來,就當做整個問題的整體最優解。老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。
你需要按照以下要求,幫助老師給這些孩子分發糖果:
每個孩子至少分配到 1 個糖果。
相鄰的孩子中,評分高的孩子必須獲得更多的糖果。
那麼這樣下來,老師至少需要準備多少顆糖果呢?
示例 1:
輸入: [1,0,2]示例 2:輸出: 5
解釋: 你可以分別給這三個孩子分發 2、1、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示例 2:公升汽油,正好足夠你返回到 3 號加油站。 因此,3 可為起始索引。
輸入: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 <= 100costs.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...