2037. 使每位学生都有座位的最少移动次数

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

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

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

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

解:将座位位置数组和学生位置数组排序,然后第i个学生坐在第i个座位上即可。C++代码如下:

class Solution {
public:
    int minMovesToSeat(vector<int>& seats, vector<int>& students) {
        int seatSz = seats.size();
        int studentSz = students.size();
        if (seatSz != studentSz) {
            return -1;
        }

        sort(seats.begin(), seats.end());
        sort(students.begin(), students.end());
        
        int minMove = 0;
        for (int i = 0; i < seatSz; ++i) {
            minMove += abs(seats[i] - students[i]);
        }       
        
        return minMove;
    }
};
posted @   epiphanyy  阅读(7)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2020-11-22 PHP与MySQL程序设计 学习笔记 第十章 处理文件和操作系统
点击右上角即可分享
微信分享提示