成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

Stardustsky / 622人閱讀

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

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

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

思路:

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

2.找到兩個指針的中間元素;

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

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

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

注意:當兩個指針指向的數(shù)字及它們中間的數(shù)字三者相等時,無法判斷中間數(shù)字位于前面的子數(shù)組還是后面的子數(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);
    //如果下標為index1、index2和indexMid指向的三個數(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/107504.html

相關(guān)文章

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

    摘要:為檢查長度為的列表,二分查找需要執(zhí)行次操作。最后需要指出的一點是高水平的讀者可研究一下二叉樹關(guān)于二叉樹,戳這里數(shù)據(jù)結(jié)構(gòu)與算法二叉樹算法常見練習在一個二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。 常見數(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):集合、字典、散列表,無序...

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

    摘要:為檢查長度為的列表,二分查找需要執(zhí)行次操作。最后需要指出的一點是高水平的讀者可研究一下二叉樹關(guān)于二叉樹,戳這里數(shù)據(jù)結(jié)構(gòu)與算法二叉樹算法常見練習在一個二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。 常見數(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):集合、字典、散列表,無序...

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

    摘要:為檢查長度為的列表,二分查找需要執(zhí)行次操作。最后需要指出的一點是高水平的讀者可研究一下二叉樹關(guān)于二叉樹,戳這里數(shù)據(jù)結(jié)構(gòu)與算法二叉樹算法常見練習在一個二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。 常見數(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):集合、字典、散列表,無序...

    gotham 評論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ù)元素的存儲映象,稱為結(jié)點。 本文涉及更多的是概念,代碼部分請參考之前寫過的 2 篇博客 基于 Javascript 的排序算法 基于 javascript 的基本數(shù)據(jù)結(jié)構(gòu)和查找算法 本文主要是基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)和算法概念,可能部分地方會涉及更高級的算法和算法,具體內(nèi)容以...

    fsmStudy 評論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)(如鏈表,棧,隊列,圖等),...

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

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

    The question 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<