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

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

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

      8 搜索m*n矩陣中目標(biāo)值的個(gè)數(shù)(Search a 2D Matrix II)

      1 題目

      ??搜索m*n矩陣中目標(biāo)值的個(gè)數(shù)(Search a 2D Matrix II)

      lintcode:題號(hào)——38,難度——medium

      2 描述

      ??搜索m×n矩陣中的值target,返回這個(gè)值出現(xiàn)的次數(shù)。這個(gè)矩陣具有以下特性:每行中的整數(shù)從左到右是排序的。每一列的整數(shù)從上到下是排序的。在每一行或每一列中沒有重復(fù)的整數(shù)。

      ??樣例1:

      輸入:矩陣 = [[3,4]],target = 3
      輸出:1
      解釋:

      矩陣中只有1個(gè)3

      ??樣例2:

      輸入:[
      [1, 3, 5, 7],
      [2, 4, 7, 8],
      [3, 5, 9, 10]],target = 3
      輸出:2
      解釋:

      矩陣中有2個(gè)3

      3 思路

      ??該題需要對(duì)目標(biāo)值進(jìn)行計(jì)數(shù),根據(jù)題意,目標(biāo)值出現(xiàn)的區(qū)域可能并不集中(樣例2中的兩個(gè)目標(biāo)值“3”的位置并不相鄰),需要找到一種算法能夠查找到所有目標(biāo)值。
      ??該題和上一題[1]中對(duì)矩陣的約束并不相同,該題并沒有讓每一行的首位比上一行末尾大,所以上一題通過拉長(zhǎng)整個(gè)矩陣形成一個(gè)遞增序列的思路走不通。
      ??接下來最直觀的方式就是按行尋找,每行執(zhí)行一次二分法,判斷是否存在目標(biāo)值,統(tǒng)計(jì)找到的次數(shù),這種方式每行耗時(shí)O(log n),一共m行,所以時(shí)間復(fù)雜度為O(m * log n),由于矩陣的每個(gè)橫縱都是遞增序列,執(zhí)行之前先判斷哪個(gè)維度比較大,再將較大的維度放在log真數(shù)的位置,可以有效減少耗時(shí)。

      例如:m = 8n = 1008 * log1024 = 80要遠(yuǎn)小于1024 * log 8 = 3069。(時(shí)間復(fù)雜度的計(jì)算里log默認(rèn)以2為底數(shù))

      ??再考慮上一題中最后一種思路——走樓梯算法,選擇左下角為起點(diǎn)(非要選右上角也是可以的,但左上和右下不行),將當(dāng)前位置的值和目標(biāo)值比較,大于目標(biāo)值,為了找到目標(biāo)值,則當(dāng)前位置上移一格;小于目標(biāo)值則當(dāng)前位置右移一格;等于目標(biāo)值則進(jìn)行計(jì)數(shù),此時(shí)上一格和右一格值都不會(huì)是目標(biāo)值,所以直接向右上角斜向移動(dòng)一格。直到走出矩陣的邊界為止,查找結(jié)束,該方式耗時(shí)O(m + n)。

      ??按行二分法的方式時(shí)間復(fù)雜度最小,套用經(jīng)典二分搜索[2]的模版可以很快做出。這里看一下走樓梯算法,走樓梯算法更直觀,更便于記憶。走樓梯算法的步驟如下:

      1. 選擇左下角為起點(diǎn);
      2. 比較當(dāng)前值和目標(biāo)值;
      3. 當(dāng)前值>目標(biāo)值,則向上走;當(dāng)前值<目標(biāo)值,則向右走;當(dāng)前值==目標(biāo)值,則向右上走,并進(jìn)行計(jì)數(shù)。
      4. 直到走出矩陣的邊界為止。

      3.1 圖解

      輸入:[
      [1, 2, 3, 6, 8],
      [2, 4, 6, 9, 10],
      [3, 5, 8, 10, 14]],
      [4, 6, 9, 12, 17]],
      [5, 7, 10, 14, 18]],target = 6
      輸出:3
      解釋:

      矩陣中有3個(gè)6

      初始矩陣:

      \[\begin{bmatrix} 1&2&3&6&8\\ 2&4&6&9&10\\ 3&5&8&10&14\\ 4&6&9&12&17\\ 5&7&10&14&18\\ \end{bmatrix} \]

      左下角5為起點(diǎn),target目標(biāo)值為6:

      \[\begin{bmatrix} 5\\ \end{bmatrix} \]

      當(dāng)前值5小于target,為了找到目標(biāo)值,向右走值遞增:

      \[\begin{bmatrix} 5&7\\ \end{bmatrix} \]

      當(dāng)前值7大于target,向上走值遞減:

      \[\begin{bmatrix} &6\\ 5&7\\ \end{bmatrix} \]

      當(dāng)前值6等于target,對(duì)目標(biāo)值計(jì)數(shù)為1,并向右上走(因?yàn)橛疫叴笥?,上邊小于6,都不可能為目標(biāo)值):

      \[\begin{bmatrix} &&8\\ &6\\ 5&7\\ \end{bmatrix} \]

      當(dāng)前值8大于target,向上走值遞減:

      \[\begin{bmatrix} &&6\\ &&8\\ &6\\ 5&7\\ \end{bmatrix} \]

      當(dāng)前值6等于target,對(duì)目標(biāo)值計(jì)數(shù)+1,此時(shí)為2,并向右上走:

      \[\begin{bmatrix} &&&6\\ &&6\\ &&8\\ &6\\ 5&7\\ \end{bmatrix} \]

      當(dāng)前值6等于target,對(duì)目標(biāo)值計(jì)數(shù)+1,此時(shí)為3,并向右上走:

      \[\begin{bmatrix} 1&2&3&(6)&8\\ 2&4&(6)&9&10\\ 3&5&(8)&10&14\\ 4&(6)&9&12&17\\ (5)&(7)&10&14&18\\ \end{bmatrix} \]

      超出矩陣邊界,計(jì)數(shù)結(jié)束,查找到的目標(biāo)值計(jì)數(shù)為3個(gè)。

      3.2 時(shí)間復(fù)雜度

      ??算法的時(shí)間復(fù)雜度為O(m + n)

      3.3 空間復(fù)雜度

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

      4 源碼

      ??注意事項(xiàng):

      注意橫縱邊界的值計(jì)算。

      ??C++版本:

      /**
      * @param matrix: 數(shù)值矩陣
      * @param target: 目標(biāo)值
      * @return: 目標(biāo)值在矩陣中出現(xiàn)的次數(shù)
      */
      int searchMatrix(vector<vector<int>> &matrix, int target) {
          // write your code here
          if (matrix.empty() || matrix.front().empty())
          {
              return 0;
          }
      
          int row = matrix.size() - 1;
          int col = 0;
          int count = 0;
          while (row >= 0 && col <= matrix.front().size() - 1)
          {
              if (matrix.at(row).at(col) > target)
              {
                  row--;
              }
              else if (matrix.at(row).at(col) < target)
              {
                  col++;
              }
              else
              {
                  row--;
                  col++;
                  count++;
              }
          }
      
          return count;
      }
      

      1. 搜索m*n矩陣中的目標(biāo)值:https://blog.csdn.net/SeeDoubleU/article/details/118618500 ??

      2. 經(jīng)典二分搜索:https://blog.csdn.net/SeeDoubleU/article/details/118271548 ??

      posted @ 2021-07-14 00:51  seedoubleu  閱讀(99)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 日韩精品有码中文字幕| 人妻少妇精品中文字幕| 亚洲国产精品久久久久4婷婷 | 亚洲综合色在线视频WWW| 金阳县| 亚洲中文字幕精品第三区| 亚洲精品无码成人A片九色播放| 一个色的导航| 色偷偷亚洲女人天堂观看| 国产精品色内内在线播放| 狠狠躁夜夜人人爽天96| 日韩中文字幕人妻精品| 国产婷婷色一区二区三区| 1区2区3区4区产品不卡码网站| 亚洲精品视频一二三四区| 女人下边被添全过视频的网址| 99网友自拍视频在线| 天天拍夜夜添久久精品大| 桦甸市| 亚洲av午夜福利精品一区二区| 免费AV手机在线观看片| 国语精品自产拍在线观看网站| 国产jlzzjlzz视频免费看 | 一区二区三区无码免费看| 亚洲色婷婷一区二区| 亚洲高清aⅴ日本欧美视频| 蜜臀av一区二区三区在线| 久久香蕉国产线看观看怡红院妓院| 精品人妻码一区二区三区| 免费久久人人爽人人爽AV| 独山县| 欧美性xxxxx极品| 办公室强奷漂亮少妇视频| 人人人澡人人肉久久精品| 女同性恋一区二区三区视频 | 亚洲v欧美v日韩v国产v| 99久久精品看国产一区| 天津市| 国内精品伊人久久久影视| 国产午夜精品福利视频| 2020年最新国产精品正在播放|