1029 兩地排程

2021-10-12 16:45:53 字數 1466 閱讀 8702

題目描述:

公司計畫面試 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] <= 100

方法1:

(1)貪心;

(2)將原陣列的元素根據到兩個城市的成本的差值的絕對值進行排序,則從頭到尾遍歷排序後的陣列,到那個城市的成本低,就到那個城市,知道到達某個城市的人數達到了限制的一半,則將剩下人都安排到去另乙個城市;

class

solution);

int count_a=

0,count_b=0;

//統計到兩個城市的人數

int sum_a=

0,sum_b=0;

//統計到兩個城市的成本

int index=0;

//遍歷陣列的索引

while

(indexsize()

)else

++index;

if(count_a*

2==costs.

size()

||count_b*

2==costs.

size()

)}//將剩餘的人安排到另乙個城市

if(count_a*

2==costs.

size()

)}else

}return sum_a+sum_b;

//返回總的成本}}

;

方法2:

主要思路:

(1)同樣是貪心,只不過排序的函式不同,直接根據差異,將其分成前後兩組進行操作;

class

solution);

int sum_a=

0,sum_b=0;

int end=costs.

size()

/2;for

(int i=

0;i++i)

return sum_a+sum_b;}}

;

1029 兩地排程

公司計畫面試 2n 人。第 i 人飛往 a 市的費用為 costs i 0 飛往 b 市的費用為 costs i 1 返回將每個人都飛到某座城市的最低費用,要求每個城市都有 n 人抵達。示例 輸入 10,20 30,200 400,50 30,20 輸出 110 解釋 第乙個人去 a 市,費用為 1...

leetcode 1029 兩地排程

兩地排程 公司計畫面試 2n 人。第 i 人飛往 a 市的費用為 costs i 0 飛往 b 市的費用為 costs i 1 返回將每個人都飛到某座城市的最低費用,要求每個城市都有 n 人抵達。示例 輸入 10,20 30,200 400,50 30,20 輸出 110 解釋 第乙個人去 a 市,...

leetcode 1029 兩地排程(貪心)

題目描述 公司計畫面試 2n 人。第 i 人飛往 a 市的費用為 costs i 0 飛往 b 市的費用為 costs i 1 返回將每個人都飛到某座城市的最低費用,要求每個城市都有 n 人抵達。題解 個人思路 為了近可能的降低費用,我們應該優先安排飛往a b兩市費用差距最大的去費用較小的市,以此來...