成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

數(shù)據(jù)結(jié)構(gòu)與算法(查找和排序) --javascript語言描述

Stardustsky / 678人閱讀

摘要:如此,便可以縮小搜索范圍,提高時(shí)間復(fù)雜度,最終第一個(gè)指針指向前面子數(shù)組的最后一個(gè)元素,而第二個(gè)指針指向后面子數(shù)組的第一個(gè)元素,它們處于相鄰位置,而第二個(gè)指針指向的剛好是最小的元素。

旋轉(zhuǎn)數(shù)組的最小數(shù)字(二分查找)

把一個(gè)數(shù)組最開始的若干個(gè)元素搬到數(shù)組的末尾,我們稱之為數(shù)組的旋轉(zhuǎn)。 輸入一個(gè)非遞減排序的數(shù)組的一個(gè)旋轉(zhuǎn),輸出旋轉(zhuǎn)數(shù)組的最小元素。 例如數(shù)組{3,4,5,1,2}為{1,2,3,4,5}的一個(gè)旋轉(zhuǎn),該數(shù)組的最小值為1。 NOTE:給出的所有元素都大于0,若數(shù)組大小為0,請(qǐng)返回0。

思路:

1.設(shè)置兩個(gè)指針,初始狀態(tài)第一個(gè)指針指向前面子數(shù)組的第一個(gè)元素,第二個(gè)指針指向后面子數(shù)組的最后一個(gè)元素;

2.找到兩個(gè)指針的中間元素;

3.若其大于等于第一個(gè)指針指向的元素,則說明其在前面的子數(shù)組中,且顯然最小元素在中間元素的右邊,若其小于等于第二個(gè)指針指向的元素,則說明其在后面的子數(shù)組中,且顯然最小元素在中間元素的左邊。

如此,便可以縮小搜索范圍,提高時(shí)間復(fù)雜度,最終第一個(gè)指針指向前面子數(shù)組的最后一個(gè)元素,而第二個(gè)指針指向后面子數(shù)組的第一個(gè)元素,它們處于相鄰位置,而第二個(gè)指針指向的剛好是最小的元素。

注意:按旋轉(zhuǎn)規(guī)則,第一個(gè)元素應(yīng)該是大于或等于最后一個(gè)元素的;但也有特例:若把排序數(shù)組的前0個(gè)元素搬到最后面,及排序數(shù)組本身,仍是數(shù)組的一個(gè)旋轉(zhuǎn),此時(shí)數(shù)組中的第一個(gè)數(shù)字是最小的數(shù)字。

注意:當(dāng)兩個(gè)指針指向的數(shù)字及它們中間的數(shù)字三者相等時(shí),無法判斷中間數(shù)字位于前面的子數(shù)組還是后面的子數(shù)組,也就無法移動(dòng)兩個(gè)指針來縮小查找的范圍,此時(shí)只能用順序查找的方法。

例如:數(shù)組{1,0,1,1,1}和數(shù)組{1,1,1,0,1}都可看成是遞增數(shù)組{0,1,1,1,1}的旋轉(zhuǎn)。第一種情況,中間數(shù)字位于后面的子數(shù)組,第二種情況,中間數(shù)字位于前面的子數(shù)組。

function minNumberInRotateArray(arr) {
  let index1 = 0;
  let index2 = arr.length - 1;
  let indexMid = index1;
  while(arr[index1] >= arr[index2]) {
    if(index2 - index1 == 1) {
      indexMid = index2;
      break;
    }
    indexMid = Math.floor((index1 + index2 ) / 2);
    //如果下標(biāo)為index1、index2和indexMid指向的三個(gè)數(shù)字相等
    //則只能順序查找
    if(arr[index1] == arr[index2] && arr[indexMid] == arr[index1]) {
      return MininOrder(arr,index1,index2);
    }
    if(arr[indexMid] >= arr[index1]) {
      index1 = indexMid;
    }
    if(arr[indexMid] <= arr[index2]) {
      index2 = indexMid;
    }
  }
  return arr[indexMid];
}

//按順序查找函數(shù)
function MininOrder(arr,index1,index2) {
  let res = arr[index1];
  for (var i = index1 + 1; i <= index2; i++) {
    if(res > arr[i]) {
      res = arr[i];
    }
  }
  return res;
}

console.log(minNumberInRotateArray([3,4,5,1,2]));

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/107504.html

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)算法:二分查找

    摘要:為檢查長度為的列表,二分查找需要執(zhí)行次操作。最后需要指出的一點(diǎn)是高水平的讀者可研究一下二叉樹關(guān)于二叉樹,戳這里數(shù)據(jù)結(jié)構(gòu)與算法二叉樹算法常見練習(xí)在一個(gè)二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。 常見數(shù)據(jù)結(jié)構(gòu) 簡單數(shù)據(jù)結(jié)構(gòu)(必須理解和掌握) 有序數(shù)據(jù)結(jié)構(gòu):棧、隊(duì)列、鏈表。有序數(shù)據(jù)結(jié)構(gòu)省空間(儲(chǔ)存空間?。?無序數(shù)據(jù)結(jié)構(gòu):集合、字典、散列表,無序...

    zsirfs 評(píng)論0 收藏0
  • 數(shù)據(jù)結(jié)構(gòu)算法:二分查找

    摘要:為檢查長度為的列表,二分查找需要執(zhí)行次操作。最后需要指出的一點(diǎn)是高水平的讀者可研究一下二叉樹關(guān)于二叉樹,戳這里數(shù)據(jù)結(jié)構(gòu)與算法二叉樹算法常見練習(xí)在一個(gè)二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。 常見數(shù)據(jù)結(jié)構(gòu) 簡單數(shù)據(jù)結(jié)構(gòu)(必須理解和掌握) 有序數(shù)據(jù)結(jié)構(gòu):棧、隊(duì)列、鏈表。有序數(shù)據(jù)結(jié)構(gòu)省空間(儲(chǔ)存空間?。?無序數(shù)據(jù)結(jié)構(gòu):集合、字典、散列表,無序...

    you_De 評(píng)論0 收藏0
  • 數(shù)據(jù)結(jié)構(gòu)算法:二分查找

    摘要:為檢查長度為的列表,二分查找需要執(zhí)行次操作。最后需要指出的一點(diǎn)是高水平的讀者可研究一下二叉樹關(guān)于二叉樹,戳這里數(shù)據(jù)結(jié)構(gòu)與算法二叉樹算法常見練習(xí)在一個(gè)二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。 常見數(shù)據(jù)結(jié)構(gòu) 簡單數(shù)據(jù)結(jié)構(gòu)(必須理解和掌握) 有序數(shù)據(jù)結(jié)構(gòu):棧、隊(duì)列、鏈表。有序數(shù)據(jù)結(jié)構(gòu)省空間(儲(chǔ)存空間?。?無序數(shù)據(jù)結(jié)構(gòu):集合、字典、散列表,無序...

    gotham 評(píng)論0 收藏0
  • 基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)算法概念

    摘要:數(shù)據(jù)結(jié)構(gòu)程序數(shù)據(jù)結(jié)構(gòu)算法數(shù)據(jù)結(jié)構(gòu)基本概念數(shù)據(jù)的邏輯結(jié)構(gòu)反映數(shù)據(jù)元素之間的關(guān)系的數(shù)據(jù)元素集合的表示。這兩部分信息組成數(shù)據(jù)元素的存儲(chǔ)映象,稱為結(jié)點(diǎn)。 本文涉及更多的是概念,代碼部分請(qǐng)參考之前寫過的 2 篇博客 基于 Javascript 的排序算法 基于 javascript 的基本數(shù)據(jù)結(jié)構(gòu)和查找算法 本文主要是基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)和算法概念,可能部分地方會(huì)涉及更高級(jí)的算法和算法,具體內(nèi)容以...

    fsmStudy 評(píng)論0 收藏0
  • JavaScript數(shù)據(jù)結(jié)構(gòu)算法

    摘要:棧被稱為一種后入先出的數(shù)據(jù)結(jié)構(gòu)。散列使用的數(shù)據(jù)結(jié)構(gòu)叫做散列表。這些操作需要求助于其他數(shù)據(jù)結(jié)構(gòu),比如下面介紹的二叉查找樹。 前言 在過去的幾年中,得益于Node.js的興起,JavaScript越來越廣泛地用于服務(wù)器端編程。鑒于JavaScript語言已經(jīng)走出了瀏覽器,程序員發(fā)現(xiàn)他們需要更多傳統(tǒng)語言(比如C++和Java)提供的工具。這些工具包括傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)(如鏈表,棧,隊(duì)列,圖等),...

    EastWoodYang 評(píng)論0 收藏0
  • 【二分查找】| 模擬 20 萬數(shù)據(jù)快速查詢 IP 歸屬地

    摘要:通過兩個(gè)二分查找的條件繼續(xù)進(jìn)行問題的分析,那么問題又來了,二分查找是快速的查找一個(gè)數(shù)據(jù)是否存在一組數(shù)據(jù)中,而且效率極高,億查找一個(gè)數(shù)據(jù)只需次查找。二分查找的三點(diǎn)重點(diǎn)循環(huán)退出條件注意是而不是。 showImg(https://segmentfault.com/img/remote/1460000018761246);這篇文章主要深入數(shù)據(jù)結(jié)構(gòu)與算法在解決實(shí)際問題怎么運(yùn)用和分析的,對(duì)于 IP...

    The question 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<