如果你想在校招中顺利拿到更好的offer,阿秀建议你多看看前人的经验 ,比如准备简历实习校招总结offer选择也欢迎来一起参加秋招打卡活动 等;如果你是计算机小白,学习/转行/校招路上感到迷茫或者需要帮助,可以点此联系阿秀;免费分享阿秀个人学习计算机以来的收集到的好资源,点此白嫖;如果你需要《阿秀的学习笔记》网站中求职相关知识点的PDF版本的话,可以点此下载

# 1029. 两地调度 第一道贪心的题目

力扣原题链接(点我直达) (opens new window)

公司计划面试 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
2
3
4
5
6
7
8
9

提示:

  1. 1 <= costs.length <= 100
  2. costs.length 为偶数
  3. 1 <= costs[i][0], costs[i][1] <= 1000

# 第一版,看的最优解,挺有道理的

以costs[0]-costs[1]的差值从小到大排列,前一半去A,后一半去B

执行用时 :4 ms, 在所有 cpp 提交中击败了96.28%的用户

内存消耗 :9.3 MB, 在所有 cpp 提交中击败了100.00%的用户

static bool compare(const vector<int>& a,const vector<int>& b) {

	return a[0] - a[1] < b[0] - b[1];

}
int twoCitySchedCost(vector<vector<int>>& costs) {
	sort(costs.begin(), costs.end(), compare);
	int count = 0, sum = 0,len=costs.size();

	for (auto& cost : costs) {

		if (count * 2 < len) sum += cost[0];
		else
			sum += cost[1];
		count++;
	}

	return sum;

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21