Ruby 获得最多可参加活动列表的最佳方式

Ruby 获得最多可参加活动列表的最佳方式,ruby,algorithm,Ruby,Algorithm,对于该问题,输入是如下所示的数组: [[4,8],[1,3],[7,9],[5,6]] 其中,每个元素的第一个数字表示开始小时,第二个数字表示结束小时 获得最多活动列表的最佳方式是什么 我的做法是: 按开始时间按升序对数组排序 从最后一个到第一个遍历每个元素,并检查它们是否重叠(当前元素的开始时间低于左侧元素的结束时间) 如果存在重叠,请拆下左侧元件并再次检查 代码是: def time_schedule(ar) #Assuming the ar has been sorted

对于该问题,输入是如下所示的数组: [[4,8],[1,3],[7,9],[5,6]] 其中,每个元素的第一个数字表示开始小时,第二个数字表示结束小时

获得最多活动列表的最佳方式是什么

我的做法是:

  • 按开始时间按升序对数组排序
  • 从最后一个到第一个遍历每个元素,并检查它们是否重叠(当前元素的开始时间低于左侧元素的结束时间)
  • 如果存在重叠,请拆下左侧元件并再次检查
  • 代码是:

    def time_schedule(ar)
      #Assuming the ar has been sorted    
      idx = input.length - 1
      while idx >= 1
        while idx >= 1 && input[idx - 1][1] > input[idx][0]
          input.delete(input[idx - 1])
          idx -= 1
        end
        idx -= 1
      end    
      input
    end
    

    你的逻辑很接近,但错了。因为当你可以接受多个小事件时,你可能会遇到一个长事件


    相反,按结束时间进行升序排序。接受每个与之前接受的事件不重叠的事件。

    您的逻辑接近,但错误。因为当你可以接受多个小事件时,你可能会遇到一个长事件


    相反,按结束时间进行升序排序。接受与之前接受的事件不重叠的每个事件。

    我不怀疑你的主张,但你的答案可以通过提供证据(我建议用矛盾)来改进。我不怀疑你的主张,但你的答案可以通过提供证据(我建议用矛盾)来改进。