二分查找法(遞歸與循環實現)

問題:

?給定一個排序數組和一個數k,要求找到第一個k的位置和最后一個k的位置

解析:

由于給定的數組是從小到大排序的,故可以按照二分查找法來找,下面分別從遞歸和循環兩種方法來闡述:

//遞歸方法
int GetFirstK(int* data, int length, int k, int start, int end)
{if (start > end)return -1;int middleindex = (start + end) / 2;int middledata = data[middleindex];if (middledata>k){end = middleindex - 1;}else if (middledata<k){start = middleindex + 1;}else{if (middleindex==0||(middleindex>0&&data[middleindex-1]!=k))//判斷左邊的元素是否等于k,若等于,說明第一個k在左邊,否則第一個k就是middledata{return middleindex;}else{end = middleindex - 1;}}return  GetFirstK(data, length, k,start, end);
}
//循環法
int GetFirstK(int* data, int length, int k)
{int start = 0;int end = length - 1;while (start<=end){int middleindex = (start + end) / 2;int middledata = data[middleindex];if (middledata<k){start = middleindex + 1;}else if (middleindex>k){end = middleindex - 1;}else{if (middleindex==0||(middleindex>0&&data[middleindex-1]!=k)){return middleindex;}else{end = middleindex - 1;}}}return -1;}
//遞歸法
int GetLastK(int* data, int length, int k, int start, int end)
{if (start>end){return -1;}int middleindex = (start + end) >> 1;int middledata = data[middleindex];if (middledata<k){start = middleindex + 1;}else if (middledata>k){end = middleindex - 1;}else{if (middleindex==length-1||(middleindex<length-1&&data[middleindex+1]!=k)){return middleindex;}else{start = middleindex + 1;}}return GetLastK(data, length, k, start, end);
}
//循環法
int GetLastK(int* data, int length, int k)
{int start = 0;int end = length - 1;while (start<=end){int middleindex = (start + end) >> 1;int middledata = data[middleindex];if (middledata>k){end = middleindex - 1;}else if (middledata<k){start = middleindex + 1;}else{if (middleindex==length-1||(middleindex<length-1&&data[middleindex+1]!=k)){return middleindex;}else{start = middleindex + 1;}}}return -1;
}



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259228.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259228.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259228.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電腦顯示器變色_電腦維修(看完后就可以開一家自己的電腦維修店!)

第二部分 常見故障判斷本部分將計算機從開機一直到關機期間的故障進行分類。每一類的判斷、定位過程都是第一部分中維修判斷一節的有機組成部分&#xff0c;即不論使用什么方法或不論去判斷什么內容&#xff0c;這兩部分總是相互結合使用的。以下各故障類型中所列的故障現象只是…

linux運維基礎篇 unit7

unit 71.進程定義進程就是cpu未完成的工作2.ps命令psa ##關于當前環境的所有進程x ##與當前環境無關的所有進程f ##顯示進程從屬關系e ##顯示進程調用環境工具的詳細信息l ##長列表顯示進程的詳細信息u ##顯…

運行快捷指令無法連接服務器失敗,快捷指令打不開怎么回事?iPhone快捷指令無法載入的解決辦法...

經常會有果粉朋友反饋&#xff0c;自己的 iPhone 快捷指令打不開。具體表現是&#xff0c;在 Safari 瀏覽器中&#xff0c;打開快捷指令下載安裝頁面&#xff0c;點擊“獲取捷徑”后&#xff0c;一直卡在快捷指令中心正在載入頁面&#xff0c;等半天都無法正常載入需要安裝的快…

Bigpipe---FaceBook使用的頁面加載技術

BigPipe&#xff08;FaceBook使用的頁面加載技術&#xff09; 理論部分&#xff1a;用戶輸入域名發送請求到服務端&#xff0c;服務端組合出需要的業務數據返回給客戶端&#xff0c;這一過程是現在網頁請求最基本傳統的方式了。 好處&#xff1a;只做了一次http請求&#xff0c…

maven搭建多模塊項目和管理

在eclipse下構建maven項目&#xff0c;該項目由多個子模塊組成。 1.創建一個父項目 NEW -->project-->maven-->maven Project&#xff0c;點擊下一步&#xff0c;進入new maven Project的Select project name and location界面 &#xff0c;什么也不做&#xff0c;直接…

shsh驗證服務器,教你從Cydia上取出SHSH并驗證有效性!

原標題&#xff1a;教你從Cydia上取出SHSH并驗證有效性&#xff01;今天在第一篇內容中和大家說了如何讓32位設備進行降級&#xff0c;但這其中有個很重要的問題就是如何提取出對應設備的SHSH&#xff0c;雖然說本篇內容并不是對所有人都有效&#xff0c;但至少多了一個可選擇的…

Discuz!$_G變量的使用方法

1&#xff0c;G變量的使用方法&#xff1a;例如&#xff1a;$_G[style][boardlogo]風格變量篇$_G[style] > Array(官方模板區 cr180整理$_G[style][styleid] > 當前風格ID$_G[style][name] > 當前風格名$_G[style][templateid] > 當前模板體系$_G[style][tpldir] &…

n!后面有多少個0(轉載)

我的思路&#xff1a; 從”那些數相乘可以得到10”這個角度&#xff0c;問題就變得比較的簡單了。 首先考慮&#xff0c;如果N的階乘為K和10的M次方的乘積&#xff08;N&#xff01;K?10M&#xff09;&#xff0c;那么N!末尾就有M個0。 如果將N的階乘分解后&#xff0c;那么…

ico的尺寸_批量壓縮、加水印、調整尺寸……用這 6 款 Mac 圖片工具一鍵解決

不論是寫文章、做教程&#xff0c;還是處理攝影作品、上傳社交平臺&#xff0c;對圖片的處理肯定少不了。龐大又貴重的專業軟件不僅成本較高&#xff0c;還有著不小的上手難度。如果我們僅僅是想要&#xff1a;縮小圖片體積、添加水印或者批量對圖片進行操作等等&#xff0c;使…

轉:MAC 下安裝PHONEGAP開發環境

MAC 下安裝PHONEGAP開發環境 什么是Phonegap呢&#xff1f;Phonegap是一個利用HTML5去開發App的框架。可以為安卓、iOS、WP、黑莓、火狐等移動操作系統。采用HTML5來編寫交互界面。其優點是編寫一次可以編譯到各種移動平臺上&#xff0c;大大為公司節省了開發周期。但是它也是有…

Sql 行轉列問題總結

1、行轉列---1、最簡單的行轉列 /* 問題&#xff1a;假設有張學生成績表(tb)如下: 姓名 課程 分數 張三 語文 74 張三 數學 83 張三 物理 93 李四 語文 74 李四 數學 84 李四 物理 94想變成(得到如下結果)&#xff1a; 姓名 語文 數學 物理 李四 74 84 94 張三 74 8…

尋找第K大的數字

尋找第k大的數字&#xff0c;有很多方法&#xff0c;最基本的就是將數組按照從大到小的順序排列&#xff0c;找出第k個元素即可。但是這種方法的時間復雜度為o(nlog(n)),我們還能找到更好地方法。下面我們將介紹另外兩種辦法&#xff0c;一種是基于快排Partition的方法&#xf…

(12)MSP430F5529 常用內置函數和一些說明

&#xff08;1&#xff09; MSP430F5529支持最高工作頻率為25MHZ&#xff0c;也就是說你通過 鎖相環倍頻來提高系統運行速度是有一個限制的&#xff0c; 最高只能到25MHZ&#xff08;再高沒意思了&#xff09;。 &#xff08;2&#xff09;幾個重要的內聯函數 &#xff08;內聯…

從零開始學android編程_android初學者的入門秘籍

大概是去年年底開始接觸android原本是學習嵌入式的我&#xff0c;領導讓我看看能不能搞一下這個android APP。一開始的我懵逼得很。。。這android APP 不是得用java寫嗎&#xff1f;&#xff1f;&#xff1f; 現在我看網上說比較多還是用kotlin&#xff0c;沒去學。。。好家伙&…

修改了sql默認路徑無法登錄服務器,PostgreSQL錯誤'無法連接到服務器:沒有這樣的文件或目錄'...

像其他一些人一樣,當我在我的項目中運行rake db:migrate或者甚至為我的Ruby on Rails 3.2應用程序嘗試大多數數據庫任務時,我收到此錯誤.PGError(無法連接到服務器:沒有這樣的文件或目錄.服務器是否在本地運行并接受Unix域套接字上的連接"/tmp/.s.PGSQL.5432"&#x…

QMarkDowner編譯

第一次完整的編譯一個工程。哈哈 記錄一下 準備環境 我的環境是win7 x64, python2.7.5 x64的。 python 3.x的我沒試過,有需要的朋友可以試一下。 安裝python2.7.5 x64 確保將安裝路徑加入到Path中 PyQt4 啊 我的環境是win的 當然要下win版 (PyQt4-4.10.3-gpl-Py2.7-Qt4.8.5-x6…

C++ STL的查找算法

假設你有一個序列容器&#xff0c;或者有一對迭代器標識了一個區間,現在你希望在容器中查找一些信息&#xff0c;這樣的查找工作如何進行呢&#xff1f;你的選擇往往是&#xff1a; count,count_if,find,find_if,binary_search,lower_bound,upper_bound,equal_range.該如何選擇…

習題七

umask 022 &#xff0c;請描述該命令的含義創建目錄時默認的權限為&#xff1a;755 rwxr-xr-x創建文件時默認的權限為&#xff1a;644 rw-r--r--note:創建文件的默認權限是拿掉了X 所以最大為666&#xff0c;而目錄最大為777 umask NUM 就是去掉相應的權限轉載于:https://blo…

web中的cookie管理

本篇是以JSP為背景介紹&#xff0c;但是在web開發中也是相同的原理。 什么是cookie 由于http是一種無狀態的協議&#xff0c;因此服務器收到請求后&#xff0c;只會當做一次新的請求。即便你重復發送了1000次同樣的請求&#xff0c;這1000次都屬于獨立的請求。 這樣顯然效率很低…

unity怎么設置游戲頁面_杭州有沒有正規的unity游戲開發培訓機構?

現在Unity游戲開發是個火熱的行業&#xff0c;薪資待遇比較高&#xff0c;未來的發展方向和前景也比較不錯&#xff0c;很多人也都想成為專業Unity游戲開發工程師&#xff0c;學習Unity游戲開發已經成為很多追求更好就業前景的人的選擇。學習專業、系統的Unity游戲開發知識并達…