代码 测试用例 测试用例 执行结果 2037. 使每位学生都有座位的最少移动次数

题目:

一个房间里有 n 个座位和 n 名学生,房间用一个数轴表示。给你一个长度为 n 的数组 seats ,其中 seats[i] 是第 i 个座位的位置。同时给你一个长度为 n 的数组 students ,其中 students[j] 是第 j 位学生的位置。

你可以执行以下操作任意次:

增加或者减少第 i 位学生的位置,每次变化量为 1 (也就是将第 i 位学生从位置 x 移动到 x + 1 或者 x - 1)
请你返回使所有学生都有座位坐的 最少移动次数 ,并确保没有两位学生的座位相同。

请注意,初始时有可能有多个座位或者多位学生在 同一 位置。

示例 1:

输入:seats = [3,1,5], students = [2,7,4]
输出:4
解释:学生移动方式如下:

  • 第一位学生从位置 2 移动到位置 1 ,移动 1 次。
  • 第二位学生从位置 7 移动到位置 5 ,移动 2 次。
  • 第三位学生从位置 4 移动到位置 3 ,移动 1 次。
    总共 1 + 2 + 1 = 4 次移动。

思路:利用贪心算法,先将两个数组先依次排序,再进行遍历,把两者差的绝对值加起来就是要移动的步数

语法知识:

  1. sort(seats.begin(),seats.end()) sort()函数是C++标准库中的一种排序算法,它可以按照默认的升序方式对容器中的元素进行排序。seats.begin()和seats.end()是两个迭代器,表示排序的范围,即从seats的第一个元素开始到最后一个元素的下一个位置。
  2. abs(students[i]-seats[i]) abs(students[i]-seats[i]) 表示计算 students[i]seats[i] 之间的差的绝对值。

abs() 是C++标准库中的绝对值函数,用于返回一个数的绝对值。在这里,它被用于计算 students[i]seats[i] 之间的差的绝对值。

例如,如果 students[i] 的值为5,seats[i] 的值为3,那么 abs(students[i]-seats[i]) 的结果就是2。

代码:

class Solution {
public:
    int minMovesToSeat(vector<int>& seats, vector<int>& students) {
        int move = 0;
        sort(seats.begin(),seats.end());
        sort(students.begin(),students.end());
        for(int i=0;i<seats.size();i++)
        {
            move+=abs(students[i]-seats[i]);
        }
        return move;
        }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值