Leetcode
Day05
T2037使每位学生都有座位的最少移动次数
一个房间里有 n
个座位和 n
名学生,房间用一个数轴表示。给你一个长度为 n
的数组 seats
,其中 seats[i]
是第 i
个座位的位置。同时给你一个长度为 n
的数组 students
,其中 students[j]
是第 j
位学生的位置。
你可以执行以下操作任意次:
- 增加或者减少第
i
位学生的位置,每次变化量为1
(也就是将第i
位学生从位置x
移动到x + 1
或者x - 1
)
请你返回使所有学生都有座位坐的 最少移动次数 ,并确保没有两位学生的座位相同。
请注意,初始时有可能有多个座位或者多位学生在 同一 位置。
static int cmp(const void *pa, const void *pb) {
return *(int *)pa - *(int *)pb;
}
int minMovesToSeat(int* seats, int seatsSize, int* students, int studentsSize){
qsort(seats, seatsSize, sizeof(int), cmp);
qsort(students, studentsSize, sizeof(int), cmp);
int res = 0;
for (int i = 0; i < seatsSize; i++) {
res += abs(seats[i] - students[i]);
}
return res;
}
学习感悟
- 对seat和students数组分别使用排序函数qsort()进行排序
- 在顺序的情况下,算出两者距离差的sum值即为最少移动次数