国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

千鋒教育web前端高頻面試題視頻教程,kerwin大話前端面試秘籍(附答案)

2023-07-16 16:21 作者:小螞蟻愛上你  | 我要投稿

高頻算法:二分搜索

第一步:對數(shù)組進(jìn)行排序

第二步:對排序后的數(shù)組查找中間值

如果查找的元素比中間的值就返回側(cè)的數(shù)組,

如果查找的元素比中間的值就返回側(cè)的數(shù)組

如果找不到就遞歸再繼續(xù)找,返回左側(cè)和右側(cè)的數(shù)組

在此之前一定要先排序,再查找。

先創(chuàng)建一個(gè)函數(shù),里面?zhèn)魅?個(gè)參數(shù),第一個(gè)是要查找的元素find,第二個(gè)是這個(gè)數(shù)組arr,第三個(gè)是數(shù)組中開始的索引start,第四個(gè)是數(shù)組中結(jié)束的索引end。

開始的索引減去結(jié)束的索引除以2就是中間值的索引

第一次開始(start)的索引一定是0,結(jié)束(end)的索引是length-1

如果不傳start=start||0;end=end||arr.length-1

要有start和end的原因,是因?yàn)橐脕碚抑虚g的索引值

?

如果傳入的是空數(shù)組就要先判斷:如果是空數(shù)組就返回-1,表示沒有查找到位置。

查找時(shí)有幾個(gè)特殊情況

1、如果剛開始查找的值就是要找的值就直接返回start

???if (arr[start] === find) {

????????????????????return start

????????????????}

2、如果最后查找的值就是要找的值就直接返回end

?if (arr[end] === find) {

????????????????????return end

????????????????}

如果查找中間值: 公式:最后值的索引-開始值的索引/2+開始的索引

打個(gè)比方:end為y????start:為x

那么就是(y-x)/2+x?,分解一下就是y/2-x/2+x

而y/2-x/2+x就是(y+x)/2

?

而計(jì)算的值需要使用Math.ceil取整,因?yàn)橛?jì)算的結(jié)果可能不是整數(shù)

(Math.ceil0“向上取整”,即小數(shù)部分直接舍去,并向正數(shù)部分進(jìn)1)

?let mid = Math.ceil((end + start) / 2)

?

3、如果查找的值就是中間值直接返回中間的mid

??if (arr[mid] === find) {

????????????????????return mid

????????????????}

?

?

?

?

4、如果查找的值比中間的值小就重新調(diào)用函數(shù),而傳入的參數(shù)就是find,arr,start,mid-1

5、如果查找的值比中間的值大就重新調(diào)用函數(shù),而傳入的參數(shù)就是find,arr,mid+1,end

else if (arr[mid] > find) {

???return binarySearch(find, arr, start, mid - 1)

?} else {

???return binarySearch(find, arr, mid + 1, end)

??}

6、在這里還有一種情況(比如傳入的是0):如果查找的值比最小的值小,比最大的值大的話就會出現(xiàn)一直遞歸查找,所以就需要加上判斷條件查找的值大于等于最小的值和小于等于最大的值。

?if (start <= end && find >= arr[start] && find <= arr[end])

?

完整代碼:

??<script>

????????// 排序

????????function quickSort(arr) {

????????????const { length } = arr

????????????if (length < 2) {

????????????????return arr

????????????}

????????????// 基準(zhǔn)

????????????let base = arr[0]

????????????let minArr = arr.slice(1).filter(item => item <= base)

????????????let maxArr = arr.slice(1).filter(item => item > base)

????????????return quickSort(minArr).concat(base).concat(quickSort(maxArr))

????????}

?

????????// 二分搜索法

????????function binarySearch(find, arr, start, end) {

????????????start = start || 0

????????????end = end || arr.length - 1

????????????// 調(diào)用排序

????????????arr = quickSort(arr)

????????????console.log(arr)

????????????if (start <= end && find >= arr[start] && find <= arr[end]) {

????????????????if (arr[start] === find) {

????????????????????return start

????????????????}

????????????????if (arr[end] === find) {

????????????????????return end

????????????????}

????????????????let mid = Math.ceil((end + start) / 2)

????????????????if (arr[mid] === find) {

????????????????????return mid

????????????????} else if (arr[mid] > find) {

????????????????????return binarySearch(find, arr, start, mid - 1)

????????????????} else {

????????????????????return binarySearch(find, arr, mid + 1, end)

????????????????}

????????????}

????????????return -1

????????}

????????binarySearch(2, [2, 1, 8, 6, 9, 23,11])

????</script>

?

千鋒教育web前端高頻面試題視頻教程,kerwin大話前端面試秘籍(附答案)的評論 (共 條)

分享到微博請遵守國家法律
灌南县| 临沧市| 广汉市| 洛扎县| 福清市| 苏州市| 克拉玛依市| 黑水县| 宝丰县| 乌拉特中旗| 四会市| 永顺县| 富平县| 赤壁市| 浮山县| 彰化县| 阳江市| 平泉县| 芦山县| 新巴尔虎右旗| 云和县| 玉屏| 余干县| 南投县| 大埔区| 维西| 即墨市| 大厂| 高青县| 崇仁县| 蒲城县| 额济纳旗| 西乌珠穆沁旗| 泽普县| 柳河县| 崇左市| 城固县| 慈溪市| 朝阳区| 永吉县| 弋阳县|