Java面試必備知識點梳理:二分查找算法

file

在計算機世界裏「數據結構+算法=程序」,所以算法在程序開發中起着相當重要的做用。雖然咱們在開發中本身設計算法的狀況很少,在工做中卻離不開算法。不管是開發包提供的算法仍是咱們本身設計的算法,算法在程序中都無處不在。程序員

file

經常使用的算法有查找算法和排序算法。查找算法有線性查找算法、深度優先搜索算法、廣度優先搜索算法和二分查找算法,而最經常使用也最快速的就是二分查找算法了。面試

二分查找算法又叫做折半查找,要求待查找的序列有序,每次查找都取中間位置的值與待查關鍵字進行比較,若是中間位置的值比待查關鍵字大,則在序列的左半部分繼續執行該查找過程,若是中間位置的值比待查關鍵字小,則在序列的右半部分繼續執行該查找過程,直到查找到關鍵字爲止,不然在序列中沒有待查關鍵字。算法

file

下圖中,在有序數組[3,4,6,20,40,45,51,62,70,99,110] 中查找key=20的數據,根據二分查找算法,只需查找兩次便能命中數據。數據庫

file

這裏須要強調的是,二分查找算法要求要查找的集合是有序的,若是不是有序的集合,則先要經過排序算法排序後再進行查找。編程

二分查找算法的Java實現以下,代碼定義了方法binarySearch()用於二分查找,在該方法中有3個變量low、mid和high,分別表示二分查找的最小、中間和最大的數據索引。設計模式

1     publicstatic int  binarySearch(int []array,inta){
 2        intlow=0;
 3        inthigh=array.length-1;
 4        intmid;
 5       while(low<=high){
 6           mid=(low+high)/2;//中間位置
 7           if(array[mid]==a){
 8               return mid;
 9           }else if(a>array[mid]){ //向右查找
10               low=mid+1;
11           }else{ //向左查找
12               high=mid-1;
13            }
14        }
15       return -1;
16    }

在以上代碼中,經過一個while循環在數組中查找傳入的數據,在該數據大於中間位置的數據時向右查找,即最大索引位置不變,將最小索引設置爲上次循環的中間索引加1;在該數據小於中間位置的數據時向左查找,即最小索引位置不變,而後將最大索引設置爲上次循環的中間索引並減1。重複以上過程,直到中間索引位置的數據等於要查找的數據,說明找到了要查找的數據,將該數據對應的索引返回。若是遍歷到low>high尚未找到要查找的數據,則說明該數據在列表中不存在,返回-1。數組

file

面試官一般會在短短兩小時內對面試者的知識結構進行全面瞭解,面試者在回答問題時若是拖泥帶水且不能直擊問題的本質,則很難充分表現本身,最終影響面試結果。緩存

針對這種狀況,**《Offer來了:Java面試核心知識點精講(原理篇)》**一書出版上市。本書在講解知識點時不拖泥帶水,力求精簡,詳細介紹了Java程序員面試時常被問及的核心知識點。 file網絡

面試在即,Java知識點很凌亂?別急,本書是對Java程序員面試必備知識點的總結,詳細講解了JVM原理、多線程、數據結構和算法、分佈式緩存、設計模式等內容,除了原理講解,還有Java實現!但願本書可以幫助你對Java的基礎原理有更深刻、全面的理解。數據結構

面試時的原理+動手實現腦海已就位,整裝待發!互聯網寒冬怕什麼~

▉ 關於做者

王磊,現任國內某知名互聯網公司大數據技術架構師,有十餘年豐富的物聯網及大數據研發和技術架構經驗,對物聯網及大數據的原理和技術實現有深入的理解。長期從事海外項目的研發和交付工做,對異地多活數據中心的建設及高可用、高併發系統的設計有豐富的實戰經驗。

▉ 大咖推薦

  • 楊彪 / 美團高級架構師,《可伸縮服務架構》《分佈式服務架構》做者
  • 知秋(simviso) / Java編程方法論系列書籍做者
  • 王新棟 / 京東資深架構師,《架構修煉之道》做者

▉ 章節架構

第1章 講解JVM原理,涉及JVM運行機制、JVM內存模型、經常使用垃圾回收算法和JVM類加載機制等內容。

第2章 講解Java基礎知識,涉及集合、異常分類及處理、反射、註解、內部類、泛型和序列化等內容。

第3章 講解Java併發編程知識,涉及Java多線程的工做原理及應用、Java線程池的工做原理及應用,以及鎖、進程調度算法等內容。

第4章 講解數據結構知識,涉及棧、隊列、鏈表、散列表、二叉樹、紅黑樹、圖和位圖等內容。

第5章 講解Java中的經常使用算法,涉及二分查找、冒泡排序、插入排序、快速排序、希爾排序、歸併排序、桶排序、基數排序等算法。

第6章 講解網絡與負載均衡原理,涉及TCP/IP、HTTP、經常使用負載均衡算法和LVS原理等內容。

第7章 講解數據庫及分佈式事務原理,涉及數據庫存儲引擎、數據庫併發操做和鎖、數據庫分佈式事務等內容。

第8章 講解分佈式緩存的原理及應用,涉及分佈式緩存介紹、Ehcache原理及應用、Redis原理及應用、分佈式緩存設計的核心問題等內容。

第9章 講解設計模式,涉及常見的23種經典設計模式。

瞭解本書詳情

本文由博客一文多發平臺 OpenWrite 發佈!

相關文章
相關標籤/搜索