Javaをスケジュールする2つの場所

同社は2N人にインタビューする予定です。都市Aに飛ぶi番目の人のコストはコスト[i] [0]であり、都市Bに飛ぶコストはコスト[i] [1]です。

全員を特定の都市に飛ばす最小コストに戻るには、各都市にN人が到着する必要があります。

例:

入力:[[10,20]、[30,200]、[400,50]、[30,20]]
出力:110
説明:
最初の人は都市Aに行き、費用は10です。
2人目は30の費用で都市Aに行きます。
3人目は50の費用で都市Bに行きます。
4人目は20の費用で都市Bに行きます。

最小総費用は10+ 30 + 50 + 20 = 110であり、各都市の半分の人が面接を行っています。

促す:

1 <= cost.length <=
100costs.length修正
1 <= cost [i] [0]、costs [i] [1] <= 1000

出典:LeetCode
リンク:https ://leetcode-cn.com/problems/two-city-scheduling
著作権はLeetCodeが所有しています商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。

ps:フライトを待っている間に退屈したときに、2つの質問を書きました。これらの質問のアイデアは、すべて注釈に含まれています。

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