嗨,我正在学习ruby,并且已经开始练习leetcode中的问题,昨天我遇到了一个问题,从昨天起我就无法解决。我试着用ruby做这件事,但还没能做到。我试过这个
def give_chair(a)
u = a.uniq
d = []
u.each do |i|
d << i if a.count(i) == 1
end
d
end
def smallest_chair(times, target_friend)
friend = times[target_friend]
sorted_arrival_times = times.sort
leave_time_chair = {}
chair = 0
chairs_array = []
uniq_chars_array = []
sorted_arrival_times.each do |i|
if leave_time_chair.keys.select { |k| i[0] > k }.empty?
leave_time_chair[i[1]] = chair
chair+=1
else
all_keys = leave_time_chair.keys.select { |k| k <= i[0] }
chairs_array = leave_time_chair.values
p chairs_array
if give_chair(chairs_array).empty?
leave_time_chair[i[1]] = chairs_array.sort.first
else
leave_time_chair[i[1]] = give_chair(chairs_array).sort.first
end
end
if i == friend
p leave_time_chair
return leave_time_chair[i[1]]
end
end
end
# a = [[33889,98676],[80071,89737],[44118,52565],[52992,84310],[78492,88209],[21695,67063],[84622,95452],[98048,98856],[98411,99433],[55333,56548],[65375,88566],[55011,62821],[48548,48656],[87396,94825],[55273,81868],[75629,91467]]
# b = 6
# p smallest_chair(a, b)
但它在一些测试案例中失败了。我无法为它创建算法。
问题=https://leetcode.com/problems/the-number-of-the-smallest-unoccupied-chair
我的方法1。)首先,我根据到达时间对时间数组进行排序。
2.)然后迭代每个数组。
3.)现在,如果到达时间大于所有以前的离开时间(我正在创建键、离开时间的值对和给定的椅子),那么我在leave_time_chair(散列)中添加一个新的键=>值对,其中key是当前数组的离开时间,value是给定给它的椅子。
4.)然后我增加椅子(椅子+=1)
5.)否则,我将获得所有等于或小于当前到达时间的离开时间(所有_键=离开_时间_椅子。键。选择{k | k<=i[0]})
(6)然后我得到了当时所有的椅子
7.)现在我有了所有这样的椅子=>[0,0,1,2],所以我写了一个函数[give_chair(a)],它给了我那些不重复的元素。这样=>[1,2],然后我将最短的数字(椅子)分配给当前数组的离开时间。等等
8.)然后,如果我的当前数组等于朋友,我将返回该数组的主席。通过从散列(leave_time_chair)中提取它,返回leave_time_chair[i[1]]
暂无答案!
目前还没有任何答案,快来回答吧!