题目:2037.是每个学生都有座位的最少移动次数

题目来源:

        leetcode题目,网址:2037. 使每位学生都有座位的最少移动次数 - 力扣(LeetCode)

解题思路:

        贪心+排序,首先对两数组进行排序,然后让第 i 个学生坐在第 i 个位置上,移动距离之和即为所求。

        当仅有 2 人 ,两个座位时,排序得到 两人位置依次是 a1、a2,座位位置依次是 b1、b2,通过数学(穷举所有可能)可以证明 Math.abs(b1-a1)+Math.abs(b2-a2) 最小,以此类推当 有 n 个人,n 个座位时,排序后相对应差之和最小。 参考了力扣用户 peng-peng-22 在该题评论区的证明。

解题代码:

class Solution {
    public int minMovesToSeat(int[] seats, int[] students) {
        Arrays.sort(seats);
        Arrays.sort(students);
        int res=0;
        for(int i=0;i
 
  

总结:

          这题没做出来,最开始我的解题思路是两数组和之差的绝对值即可所求,提交有数据报错。思考后思路变更为每次取使差的绝对值最小的两数,但编程没编出来,此外,若存在一个数对应两个数时,需要分情况讨论。


你可能感兴趣的:(#,二刷,leetcode,java)