日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js算法初窥03(搜索及去重算法)

發布時間:2023/12/2 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js算法初窥03(搜索及去重算法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  前面我們了解了一些常用的排序算法,那么這篇文章我們來看看搜索算法的一些簡單實現,我們先來介紹一個我們在實際工作中一定用到過的搜索算法——順序搜索。

1、順序搜索

  其實順序搜索十分簡單,我們還是以第一篇文章寫好的架子作為基礎,在其中加入順序搜索的方法:

//順序搜索 this.sequentialSearch = function(item) {for(var i = 0; i < array.length; i ) {if(item === array[i]) {return i;};};return -1; };

  我想這個代碼沒什么好說的。你一定能理解的十分透徹。那么下面我們來看看二分搜索。

2、二分搜索

  我們先來做一個簡單的游戲。想象一個場景,我們在聚會,大約有7、8個人,這個時候有人提議我們來做個游戲吧。我來想一個1到100的數字,你們來猜數字是什么,我會依照我想的數字告訴你們猜測的數字是比我腦海中的數字大了還是小了。這就是二分搜索。

  與順序搜索不同的是,二分搜索需要在搜索之前對要搜索的數組排序。我們來看下代碼:

//二分搜索 this.binarySearch = function(item) {//先對數組進行快速排序this.quickSort();//low和high是邊界指針,也就是item是高了還是低了的表示,mid是我們數組的中間索引變量,element則是對應的mid的元素var low = 0,high = array.length - 1,mid,element;//如果low小于等于high說明邊界范圍是合理的。while(low <= high) {//為mid和element變量賦值。mid = Math.floor((low high) / 2);element = array[mid];// 如果中間值比我們要找的元素小,說明item在中間值的右側,要注意我們的數組時排序過后的數組了。// 所以我們直接讓等于0的low的值設置為mid 1,因為item>element,所以item必然在mid 1開始到high的區間范圍內。// 下同。if(element < item) {low = mid 1;} else if(element > item) {high = mid - 1;} else {return mid;};};return -1; };

?  其實二分搜索也并不難,看代碼和注釋就一定可以看懂的。感覺這篇內容實在是不太多,所以我決定再加入一些其他的內容吧。

3、去重

  想必大家在面試中被問到過最多的問題就是排序和去重了吧。其實這個東西真的算是老生常談了,但是卻又有它存在的必要,其實說到底,去重更重要的是思想,而不是實現,就跟前面我們學過的那些數據結構和算法一樣。

  下面我們就介紹一下去重的一些實現方法吧。

  1)set方法

    set是ES6新增的一種數據結構——集合,我在前面的有關集合的章節中也介紹過這種數據結構,集合是一種不允許重復的數據存在的數據結構,我們剛好可以利用這種特性來為數組去重。如果你還不了解set數據結構,可以去這里或者這里查看。

this.uniqueSetWay = function () {//array.form方法從類似數組或可迭代對象中創建一個新的數組實例var set = new Set(array);return Array.from(set); };//測試方法 var repeatArray = new ArrayList(); repeatArray.insert(1); repeatArray.insert(1); repeatArray.insert(3); repeatArray.insert(3); repeatArray.insert(5); repeatArray.insert(7); repeatArray.insert(7); repeatArray.insert(9); repeatArray.insert(9); repeatArray.insert(8); console.log(repeatArray.uniqueSetWay())

    要注意的是,我們這里仍舊使用了第一章所構建的數組類。

  2)雙循環

//雙循環 this.uniqueDoubleCycle = function () {var newArr = [];var len = array.length;var isRepeat;for(var i=0; i<len; i ) { //第一次循環isRepeat = false;for(var j=i 1; j<len; j ) { //第二次循環if(array[i] === array[j]){isRepeat = true;break;}}if(!isRepeat){newArr.push(array[i]);}}return newArr; };

    這種方法使用了雙重循環設置一個標記位,確定我們加入新數組的元素是否是重復的,代碼很好理解,但是這是效率最低的實現方式。

  3)排序輔助去重

//利用排序算法來輔助判斷 this.sortUnique = function () {var newArr = []; this.quickSort();//將原數組中的第一項放入新數組var newArr = [array[0]];// 我們來循環比較for(var i = 1; i < array.length; i ){//如果新數組中的最后一項與array[i]不想等,那么我們就把它加入新數組。if(array[i] !== newArr[newArr.length - 1]){newArr.push(array[i]);}} return newArr; };

    我們就簡單的介紹這三種去重方法,其實有關于去重的實現有很多種,如果大家想要繼續學習有關去重的一些內容,我這里給大家貼上幾篇不錯的文章。這里就不再多說。

    1、【 js 算法 】這么全的數組去重,你怕不怕?

    2、也談JavaScript數組去重

    3、js數組去重

    當然,有關數組去重的文章遠不止這些,只是個人覺得這些內容還不錯。本文中的代碼也是借鑒于此。那么本文到這里也就差不多結束了,下面會和大家一起學習一下算法模式(遞歸、動態規劃等)。

?

  最后,由于本人水平有限,能力與大神仍相差甚遠,若有錯誤或不明之處,還望大家不吝賜教指正。非常感謝!


更多專業前端知識,請上 【猿2048】www.mk2048.com

總結

以上是生活随笔為你收集整理的js算法初窥03(搜索及去重算法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。