<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      1 經典二分搜索(Classical Binary Search)

      1 題目

      ??經典二分搜索(Classical Binary Search)

      lintcode:題號——457,難度——easy

      2 描述

      ??在一個排序數組中找一個數,返回該數出現的任意位置,如果不存在,返回 -1。

      ??樣例 1:

      輸入:nums = [1,2,2,4,5,5], target = 2
      輸出:1 或者 2

      ??樣例 2:

      輸入:nums = [1,2,2,4,5,5], target = 6
      輸出:-1

      3 思路

      ??對有序數組可以直接使用二分法,即拿著目標元素與中間位置的元素進行比較,判斷目標元素在當前位置的左區間還是右區間,再在目標區間內再次執行二分法,直到把子區間縮小到只有一個元素,即可找到或者不存在。

      1. 找到中間位置的元素;
      2. 與目標元素比較,確定目標元素所在的區間,縮小目標區間;
      3. 重復以上操作,直到找到或者結束。

      3.1 圖解

      graph TD A[有序數組'1, 2, 3, 4, 5, 6, 7, 8, 9' 目標元素'4'] -- 中間位置元素'5',大于目標元素'4' --> B A --> A1[/拋掉'6, 7, 8, 9'/] B --> B1[\拋掉'1, 2'\] B[縮小區間至'1, 2, 3, 4, 5'] -- 中間位置元素'3',小于目標元素'4' --> C C[縮小區間至'3, 4, 5'] -- 中間位置元素'4',等于目標元素'4' --> D D(找到目標元素'4')

      3.2 時間復雜度

      ??算法的時間復雜度為O(log n)。

      3.3 空間復雜度

      ??算法的空間復雜度為O(1)。

      4 模版

      ??算法雖然簡單,但是在邊界的處理上如果不注意的話很容易就產生“死循環”、“漏元素”、“越界”的情況,產生的原因有很多,例如:

      1. 計算機的數據運算都是偏左的(給整數賦值“4.9”會被自動轉成“4”,不是四舍五入)
      2. 比較大小的時候取“>”、“<”、">="、">=",會產生不同效果
      3. 縮小區間時候取不取當前的中間元素,有可能導致死循環
      4. 在數組的頭部和尾部要考慮越界的情況

      ??為解決上述問題,分享一個通用的二分法算法的模版,需要注意的點有四個,分別如下:

      1. mid = start + (end - start) / 2
      2. start + 1 < end
      3. A[mid] ==, <, >
      4. A[start] A[end] ? target
      1. 取中點的時候使用start + (end - start) / 2,不使用(start + end) / 2,防止startend很大的時候,start + end在整型范圍內越界;
      2. 循環退出條件使用start + 1 < end,不使用start < end,防止死循環;
      3. 循環內的判斷使用==、<>單獨處理各個分支,不使用組合符號<=>=,防止死循環;
      4. 因為第二點的原因,所以循環退出后需要單獨判斷一次當前的startend位置的元素。

      5 源碼

      ??注意事項:

      1. 最后是與target比較,不要寫錯成與start、end比較;
      2. return的是index還是value要看清楚。

      ??C++版本:

      /*經典二分搜索算法
      * @param nums 有序數組
      * @param target 目標元素的值
      * @return 目標元素在有序數組中的位置(下標序號)
      */
      int findPosition(vector<int> &nums, int target) {
          // write your code here
          if (nums.empty())
          {
              return -1;
          }
          
          int start = 0;
          int end = nums.size() - 1;
          int mid = 0;
          while (start + 1 < end) // 第二點:循環條件
          {
              mid = start + (end - start) / 2; // 第一點:取中點元素
              if (nums.at(mid) == target) // 第三點:單獨處理各個分支
              {
                  return mid;
              }
              if (nums.at(mid) < target)
              {
                  start = mid;
              }
              if (nums.at(mid) > target)
              {
                  end = mid;
              }
          }
          
          if (nums.at(start) == target) // 第四點:處理循環退出后的start和end
          {
              return start;
          }
          
          if (nums.at(end) == target)
          {
              return end;
          }
          
          return -1;
      }
      
      posted @ 2021-06-30 11:06  seedoubleu  閱讀(58)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产乱码精品一区二区麻豆| 亚洲精品日本久久一区二区三区 | 国产精品久久无码不卡黑寡妇| 亚洲人成电影在线天堂色| 风流少妇又紧又爽又丰满| 久久九九99这里有视频| 中文字幕在线亚洲精品| 千阳县| 国产午夜福利精品视频| 国产一区二区三区内射高清| 国产精品中文字幕第一区| yy111111在线尤物| 国产永久免费高清在线| 国产精品成人午夜久久| av天堂午夜精品一区| 国产一区二区在线影院| 金乡县| 亚洲综合欧美在线…| 亚洲蜜臀av乱码久久| 国产亚洲国产精品二区| 激情伊人五月天久久综合| 亚洲一区二区乱码精品| 91亚洲精品一区二区三区| 亚洲蜜桃av一区二区三区 | 另类专区一区二区三区| 国产精品午夜福利导航导| 免费无码观看的AV在线播放| 临清市| 国产一区二区三区精品综合 | 毛片内射久久久一区| 玩弄漂亮少妇高潮白浆| 芒康县| 亚洲欧美一区二区成人片| 在线中文字幕亚洲日韩2020| 依依成人精品视频在线观看| 国产亚洲欧洲av综合一区二区三区| 一本大道av人久久综合| 丁香五月婷激情综合第九色| 苍溪县| 亚洲一区精品视频在线| 精品一区二区三区在线视频观看|