兰学

Python和Ruby,一个诞生于1990年,一个诞生于1995年,当然你可以说蛇叔1989年就在开发Python了,也可以说Matz是1993年就开始开发Ruby了。两种语言都是能让学生感到快乐的动态类型脚本语言,一个靠4个空格,一个靠end来区分层次,非常优雅且美丽。Ruby里一切都是对象。且两种语言都支持duck typing,非常的灵活,灵活到让你无法控制他们的美丽。
但有一件巧合的事让我十分在意,Ruby诞生于日本,Python诞生于荷兰,而历史上日本一直闭关锁国,却在国内允许人们研究荷兰的科学技术,俗称兰学。当然我不是说Matz向Guido借鉴了什么,但我想说,这两个国家的人民是真爱专研。Ruby因为Rails名声大噪,但现在已被所有的大公司弃用,要是日本人能像巴西人那样卖力的推广Lua,也不至于没落。我学习Ruby纯粹是出于Leetcode做题时用Ruby的语法糖真是太甜了,真的很方便,同时借助creek gem读取Excel数据也很方便。我完全没有用到Ruby去进行web开发,也完全不懂元编程的知识,因为到了今天我仍不知道Javascript是怎样在网页里工作的,尽管JSON.parse解析url数据玩的飞起。
今天Leetcode的每日一题,在之前Ruby的Algorithm gem没有被Leetcode官方允许使用的时候,我以为只有Python的顺序容器能解。
2349. 设计数字容器系统
这是Python解

from sortedcontainers import SortedSet

class NumberContainers:
    def __init__(self):
        self.m = {}
        self.ms = defaultdict(SortedSet)

    def change(self, index: int, number: int) -> None:
        if index in self.m:
            self.ms[self.m[index]].remove(index)  # 移除旧数据
        self.m[index] = number
        self.ms[number].add(index)  # 添加新数据

    def find(self, number: int) -> int:
        s = self.ms[number]
        return s[0] if s else -1

然而今天Ruby的Algorithm gem已被官方引用,于是我开心的用Ruby解答了。

class NumberContainers
  def initialize()
    @h1 = {}
    @h2 = {}
  end

=begin
    :type index: Integer
    :type number: Integer
    :rtype: Void
=end
  def change(index, number)
    if @h1.has_key?(index)
      t = @h1[index]
      @h2[t].delete(-index)
      if @h2[t].size == 0
        @h2.delete(t)
      end
      @h1[index] = number
    else
      @h1[index] = number
    end
    unless @h2.has_key?(number)
      @h2[number] = Containers::PriorityQueue.new
      @h2[number].push(index, -index)
    else
      @h2[number].push(index, -index)
    end
  end

=begin
    :type number: Integer
    :rtype: Integer
=end
  def find(number)
    unless @h2.has_key?(number)
      return -1
    else
      t = @h2[number].pop
      @h2[number].push(t, -t)
      return t
    end
  end
end

# Your NumberContainers object will be instantiated and called as such:
# obj = NumberContainers.new()
# obj.change(index, number)
# param_2 = obj.find(number)

今天Ruby和Python又再一次东西合璧了,开心。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容