两地调度java

公司计划面试 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-city-scheduling
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

ps:候机无聊就写了两题,这题思路都在注释

class Solution {
    
    
    public int twoCitySchedCost(int[][] costs) {
    
    
        //先把全部人都去a市,然后再让一半的人去b市,什么人去b市呢,就是去a市不省钱的人(没有进入省钱排行榜前一半)
        //a[0]-a[1]就是看是不是去a市更省钱,再减去(b[0]-b[1])就是看谁更省钱谁就留在A市
      Arrays.sort(costs,(a,b)->(a[0]-a[1]-(b[0]-b[1]))  );
    //   Arrays.sort(costs, new Comparator<int[]>() {
    
    
    //       @Override
    //       public int compare(int[] o1, int[] o2) {
    
    
    //           return o1[0] - o1[1] - (o2[0] - o2[1]);
    //       }
    //   });
      int total = 0;
      int n = costs.length / 2;
      //前一半的人留在a市后一半的人去b市
      for (int i = 0; i < n; ++i) total += costs[i][0] + costs[i + n][1];
      return total;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43824233/article/details/112604842