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

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

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

      2/3 尋找目標出現的初始or最后位置(First Position of Target/Last Position of Target)

      1 題目

      ??尋找目標出現的初始位置(First Position of Target)

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

      2 描述

      ??給定一個排序的整數數組(升序)和一個要查找的整數 target,用O(log n)的時間查找到target第一次出現的下標(從0開始),如果target不存在于數組中,返回-1。

      ??樣例:

      輸入:數組 = [1,4,4,5,7,7,8,9,9,10], target = 4
      輸出:1

      3 思路

      ??從頭開始遍歷需要的時間復雜度是O(n),要求在O(log n)的時間內完成,可以用二分法解決。

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

      ??與之前的經典二分搜索[1]大致相同,可以套用經典二分搜索的模版,需要注意的差異如下:

      1. 循環中與目標元素的比較在“>”和“==”時候的處理,都是拋掉右邊的部分;
      2. 跳出循環之后,對剩下的兩個元素的檢查順序是從左到右。

      3.2 圖解

      graph TD A[有序數組'1, 4, 4, 5, 7, 7, 8, 9, 9, 10' 目標元素'4'] -- 中間位置元素'7',大于目標元素'4' --> B A --> A1[/拋掉'7, 8, 9, 9, 10'/] B[縮小區間至'1, 4, 4, 5, 7'] -- 中間位置元素'4',小于等于目標元素'4' --> C B --> B1[/拋掉'5, 7'/] C[縮小區間至'1, 4, 4'] -- 中間位置元素'4',小于等于目標元素'4' --> D D[縮小區間至'1, 4'] -- 在頭尾元素中依次尋找目標元素 --> E E(找到目標元素'4')

      3.2 時間復雜度

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

      3.3 空間復雜度

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

      4 源碼

      ??C++:

      /**
      * @param nums: 有序數組
      * @param target: 目標元素的值
      * @return: 目標元素在有序數組中的初始位置(下標序號)
      */
      int binarySearch(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) // 大于和等于的情況處理方式相同
              {
                  end = mid;
              }
              else
              {
                  start = mid;
              }
          }
          
          if (nums.at(start) == target) // 先判斷左邊的是否是目標元素
          {
              return start;
          }
          if (nums.at(end) == target)
          {
              return end;
          }
          
          return -1;
      }
      

      5 相同類型問題

      ??題目:

      尋找目標出現的最后位置(Last Position of Target)
      lintcode:題號——458,難度——easy

      ??C++版本:

      /**
      * @param nums: 有序數組
      * @param target: 目標元素的值
      * @return: 目標元素在有序數組中的最后位置(下標序號)
      */
      int lastPosition(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)
              {
                  start = mid;
              }
              else
              {
                  end = mid;
              }
          }
          
          if (nums.at(end) == target)
          {
              return end;
          }
          
          if (nums.at(start) == target)
          {
              return start;
          }
          
          return -1;
      }
      

      1. 經典二分搜索:https://blog.csdn.net/SeeDoubleU/article/details/118271548 ??

      posted @ 2021-06-30 11:07  seedoubleu  閱讀(114)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久免费偷拍视频有没有| 国产美女高潮流白浆视频| 久久国产精品乱子乱精品| 义马市| 亚洲av成人一区二区三区| 亚洲高清成人av在线| 黑森林福利视频导航| 国产在线98福利播放视频| 国产中文三级全黄| 成人av天堂网在线观看| 午夜精品福利亚洲国产| 国产色a在线观看| 欧美亚洲国产精品久久| 亚洲自拍偷拍一区二区三区| 亚洲国产精品综合久久2007 | 猫咪AV成人永久网站在线观看 | 69天堂人成无码免费视频| 国产99青青成人A在线| 国产欧美日韩高清在线不卡| 精品国产精品午夜福利| 亚洲大尺度无码无码专线| 潮喷失禁大喷水av无码| 人人干人人噪人人摸| 亚洲黄日本午夜一区二区| 亚洲第一精品一二三区| 国产高清色高清在线观看| 成人伊人青草久久综合网| 九九久久自然熟的香蕉图片| 久久亚洲精品亚洲人av| 成人亚欧欧美激情在线观看| 四虎国产精品永久在线| 亚洲av永久无码天堂影院| 亚洲午夜天堂| 色色97| 男人用嘴添女人下身免费视频| 亚洲中文字幕成人综合网| 漂亮人妻中文字幕丝袜| 亚洲国产成人无码AV在线影院L| 污污网站18禁在线永久免费观看| 天天爽夜夜爱| 亚洲成在人天堂一区二区|