91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android二分查找算法怎么用

發布時間:2022-01-12 11:04:07 來源:億速云 閱讀:139 作者:iii 欄目:移動開發

本篇內容主要講解“Android二分查找算法怎么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Android二分查找算法怎么用”吧!

旋轉數組的最小數字

題目:把一個數組最開始的若干個元素搬到數組的末尾,我們稱之為數組的旋轉。

輸入一個遞增排序的數組的一個旋轉,輸出旋轉數組的最小元素。例如數組{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該數組的最小值為1.

實現數組的旋轉見左旋轉字符串。

解題思路

和二分查找法一樣,用兩個指針分別指向數組的第一個元素和最后一個元素。

我們注意到旋轉之后的數組實際上可以劃分為兩個排序的子數組,而且前面的子數組的元素都大于或者等于后面子數組的元素。

我們還可以注意到最小的元素剛好是這兩個子數組的分界線。我們試著用二元查找法的思路在尋找這個最小的元素。

首先我們用兩個指針,分別指向數組的第一個元素和最后一個元素。按照題目旋轉的規則,第一個元素應該是大于或者等于最后一個元素的(這其實不完全對,還有特例。后面再討論特例)。

接著我們得到處在數組中間的元素。如果該中間元素位于前面的遞增子數組,那么它應該大于或者等于第一個指針指向的元素。

此時數組中最小的元素應該位于該中間 元素的后面。我們可以把第一指針指向該中間元素,這樣可以縮小尋找的范圍。

同樣,如果中間元素位于后面的遞增子數組,那么它應該小于或者等于第二個指針指 向的元素。

此時該數組中最小的元素應該位于該中間元素的前面。我們可以把第二個指針指向該中間元素,這樣同樣可以縮小尋找的范圍。我們接著再用更新之后的 兩個指針,去得到和比較新的中間元素,循環下去。

按照上述的思路,我們的第一個指針總是指向前面遞增數組的元素,而第二個指針總是指向后面遞增數組的元素。

最后第一個指針將指向前面子數組的最后一個元素, 而第二個指針會指向后面子數組的第一個元素。也就是它們最終會指向兩個相鄰的元素,而第二個指針指向的剛好是最小的元素。這就是循環結束的條件。

核心實現代碼:

Android二分查找算法怎么用

注意:當兩個指針指向的數字及他們中間的數字三者相同的時候,我們無法判斷中間的數字是位于前面的字數組還是后面的子數組中,也就無法移動兩個指針來縮小查找的范圍。此時,我們不得不采用順序查找的方法。

2 旋轉數組中查找某個數字

要求:一個沒有重復元素的旋轉數組(它對應的原數組是有序的),求給定元素在旋轉數組內的下標(不存在的返回-1)。

例如

有序數組為{0,1,2,4,5,6,7},它的一個旋轉數組為{4,5,6,7,0,1,2}。

元素6在旋轉數組內,返回2
元素3不在旋轉數組內,返回-1

分析

遍歷一遍,可以輕松搞定,時間復雜度為O(n),因為是有序數組旋轉得到,這樣做肯定不是最優解。有序,本能反映用二分查找,舉個例子看看特點
可以看出中間位置兩段起碼有一個是有序的(不是左邊,就是右邊),那么就可以在有序的范圍內使用二分查找;如果不再有序范圍內,就到另一半去找。

參考代碼

Android二分查找算法怎么用

擴展

邊的有求是沒有重復的元素,現在稍微擴展下,可以有重復的元素,其他的要求不變。

思路:大致思路與原來相同,這是需要比較A[beg] 與 A[mid]的關系

Android二分查找算法怎么用

3 數字在排序數組中的出現次數

Android二分查找算法怎么用

Android二分查找算法怎么用

到此,相信大家對“Android二分查找算法怎么用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

军事| 扎兰屯市| 饶河县| 澜沧| 微博| 利津县| 钟祥市| 景泰县| 湘阴县| 循化| 呼和浩特市| 寻甸| 白沙| 富平县| 婺源县| 雷山县| 新龙县| 罗江县| 邵阳市| 通化市| 行唐县| 五华县| 抚宁县| 广德县| 育儿| 吉隆县| 逊克县| 香港| 北票市| 廉江市| 霸州市| 五寨县| 安顺市| 融水| 温宿县| 客服| 墨竹工卡县| 徐汇区| 渑池县| 双柏县| 德格县|