There are n availabe seats and n students standing in a room. You are given an array seats of length n, where seats[i] is the position of the ith seat. You are also given the array students of length n, where students[j] is the position of the jth student.
You may perform the following move any number of times:
ith student by 1 (i.e., moving the ith student from position x to x + 1 or x - 1)Return the minimum number of moves required to move each student to a seat such that no two students are in the same seat.
Note that there may be multiple seats or students in the same position at the beginning.
Example 1:
Input: seats = [2,1,4], students = [3,1,3]
Output: 2Explanation:
Example 2:
Input: seats = [4,1,5,9], students = [1,3,2,6]
Output: 7Explanation:
Constraints:
n == seats.length == students.length1 <= n <= 1001 <= seats[i], students[j] <= 100class Solution:
def minMovesToSeat(self, seats: List[int], students: List[int]) -> int:
seats.sort()
students.sort()
res = 0
for i in range(len(seats)):
res += abs(seats[i] - students[i])
return resclass Solution:
def minMovesToSeat(self, seats: List[int], students: List[int]) -> int:
max_index = max(max(seats), max(students)) + 1
count_seats = [0] * max_index
count_students = [0] * max_index
for seat in seats:
count_seats[seat] += 1
for student in students:
count_students[student] += 1
i = j = res = 0
remain = len(seats)
while remain:
if count_seats[i] == 0:
i += 1
if count_students[j] == 0:
j += 1
if count_seats[i] and count_students[j]:
res += abs(i - j)
count_seats[i] -= 1
count_students[j] -= 1
remain -= 1
return resWhere is the size of the input arrays, is the maximum value in the array , and is the maximum value in the array .
class Solution:
def minMovesToSeat(self, seats: List[int], students: List[int]) -> int:
count_seats = [0] * (max(seats) + 1)
count_students = [0] * (max(students) + 1)
def count_sort(arr, count):
for num in arr:
count[num] += 1
count_sort(seats, count_seats)
count_sort(students, count_students)
remain = len(seats)
i = j = res = 0
while remain:
if count_seats[i] == 0:
i += 1
if count_students[j] == 0:
j += 1
if count_seats[i] and count_students[j]:
tmp = min(count_seats[i], count_students[j])
res += abs(i - j) * tmp
count_seats[i] -= tmp
count_students[j] -= tmp
remain -= tmp
return resWhere is the size of the input arrays, is the maximum value in the array , and is the maximum value in the array .