原创 算法學習之二分查找

二分查找也稱折半查找(Binary Search),一種效率較高的查找算法。要求查找的線性表必須是有序的,關鍵字有序排序。 1、使用遞歸。 2、使用循環迭代。 最優時間複雜度O(1),最差時間複雜度O(log n)。空間複雜度O(1)。

原创 算法學習之SaddlebackSearch

SaddlebackSearch查找,用戶於二位有序數組。從上到下遞增,從左到右遞增。從左下角第一個元素(當前列值最大,當前行值最小)對比。如果目標值大於當前值,那麼這一列的值都可以排除;如果目標值小於當前值,那麼這一行的值都可以排除。排

原创 數據結構之樹基礎知識

對於大量的輸入數據,數組結構需要較大的連續內存空間,鏈表的線性訪問時間太慢,存在空間和時間問題,數組和鏈接表結構不能滿足實際業務場景需求。一種簡單的新的數據結構產生了,那就是樹,大部分操作的運行時間平均爲。   樹(Tree)是一些節點的

原创 算法藥劑問題

1000瓶藥劑,其中一瓶有毒,喝了立即死亡,小白鼠實驗那一瓶有毒? 喝了立即死亡,一隻小白鼠從1號喝到底,喝到哪兒死,哪兒有毒,簡單。 1000瓶藥劑,其中一瓶有毒,毒性一個小時發作。要在一個小時之後,找出哪一瓶有毒? 找來999只小白鼠

原创 算法學習之三分查找

三分查找(Ternary Search),查找一次就可以排除整個有序線性表的2/3,查找效率更高。最差時間複雜度O(log3 n),最優時間複雜度 O(1),空間複雜度O(1)。 Java代碼示例: /** * 使用遞歸的方法

原创 算法學習之選擇排序(直接選擇)

排序算法解決問題的算法:輸入n個對象,按對象的某一個特徵緯度排序並輸出。 選擇排序的基本思想:       首先,在未排序的數列中,找到最小(或最大)元素;然後,將其放到新數列的起始位置;接着,再從剩餘未排序的元素中繼續尋找最小(或最大)

原创 JDK軟件包1.8 java.util之Iterator

軟件包java.util迭代器(Iterator);官方介紹對collection進行迭代的迭代器。迭代器取代了java.collection.Framework中的Enumeration。迭代器與枚舉的不同點: 迭代器允許調用者利用定義

原创 JDK軟件包1.8java.util之RandomAccess

List所使用的標記接口實現,表明他們支持快速隨機訪問(通常持續時間)。這個接口的主要目的是允許通用算法來改變他們的行爲時提供良好的性能應用於隨機或順序訪問列表。 最好的算法處理隨機訪問列表(如ArrayList)時能產生二次行爲適用於順

原创 Java關鍵字(50)之斷言assert

斷言對於大型複雜程序或可靠性要求極高的程序來說有很大作用。通過斷言程序員能快速地排查出問題。一個斷言通常有兩個參數:一個是描述假設條件爲真情況的布爾表達式和需要爲假是的提示或輸出信息。 斷言可以用於以下情況: 1、輸入參數或輸出參數的取值

原创 JDK軟件包1.8java.lang之Object

Object(超類),是類層次結構的根。所有類都把Object作爲超類。所有對象都實現類了該類的方法。Java1.0起始版本都定義了該類。 方法:        Object clone();對象的複製copy        Class<

原创 JDK軟件包1.8java.lang之Class

Class類的實例表示正在運行的Java應用程序中的類和接口。每個數組屬於被映射爲Class對象的一個類,所有具有相同元素類型和緯數的數組共享該Class對象。Class對象是在加載類時由虛擬機通過類加載器defineClass方法自動構

原创 Java關鍵字(50)之Abstract

abstract修飾的類是不完整的類;方法沒有被完全實現,必須聲明爲抽象類;抽象類不能實例化(new 會出現編譯錯誤),通過子類拓展。包含抽象方法的類,必須用abstract修飾(否則,出現編譯錯誤)。 public abstract

原创 算法學習之插入排序

插入排序(Insertion sort)是一種穩定的排序算法。向一個有序的數組中,插入一個數,插入後保持數組的有序,需要用到插入排序。適合用於少量數據排序,時間複雜度爲O()。 插入排序的基本思想是:每步將一個待排序的記錄,按其關鍵碼值的

原创 Java虛擬機之自動內存管理機制

虛擬機主要是內存動態分配和垃圾收集技術。程序開發人員不需要對new 的對象寫垃圾回收,回收內存權利交給了虛擬機。如果不瞭解虛擬機出現內存泄漏和溢出方面的問題,該怎麼着手去排查呢。 程序計數器:當前線程所執行的字節碼的行號指示器,佔內存空

原创 算法學習之散列算法

       Hash,一般翻譯做散列、雜湊,或音譯爲哈希,是把任意長度的輸入(又叫做預映射pre-image)通過散列算法變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸