zoukankan      html  css  js  c++  java
  • 4. 寻找两个有序数组的中位数 (leetcode)

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。

    请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

    你可以假设 nums1 和 nums2 不会同时为空。

    一看到时间复杂度O(log)就知道应该二分法,我自己写的一段程序老是报错,这里就直接粘贴leetcode官方题解了。

    收获:

      1. 本题二分法是循环实现的

      2. 有两个边界,值小了,就把 i 的 index 赋值给左边界, 值大了, 就把 i 的 index 赋给右边界

      3. 温习了 if 语句的一行写法         

        if nums1[i] < nums2[j-1]: leftM = i +1

        elif nums2[j] < nums1[i - 1] : right = i -1 

        

      leftM, rightM, halfLength  =   0,m,(m+n+1)/2

      while leftM < rightM:

        i = (leftM+rightM)/2

        j = halfLength - i 

        if nums1[i] < nums2[j-1]: leftM = i +1

        elif nums2[j] < nums1[i - 1] : right = i -1 

        else:

          ......

          ......

  • 相关阅读:
    EMC研究院电面记
    被百度放了鸽子
    最长严格递增子序列算法
    括号配对问题
    RTP 协议
    C++ 纯虚函数, 记上一笔!
    一年又一年
    direct3d Colorkey 应用.
    CEGUI 中文输入与显示
    被遗忘的C,记录一笔
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/12245699.html
Copyright © 2011-2022 走看看