原创 數據結構和算法之有序數組轉二叉搜索樹

思路:其實就是個二分查找的過程 代碼 /** * 有序數組轉二叉搜索樹 */ public class ArrayToTree { public static class TreeNode { int

原创 數據結構和算法之TOP K算法

問: 從arr[1, n]這n個數中,找出最大的k個數 對數組進行全部排序,時間複雜O(n*lg(n)) 只對最大k個數排序,比如冒泡算法,冒K個泡,就可以拿到最大的K個數 利用最小堆解決 步驟一、找出數組前k個數,組

原创 數據結構和算法之布隆過濾算法

文章目錄步驟總結代碼實現 步驟 首先需要初始化一個二進制的數組,長度設爲 L(圖中爲 8),同時初始值全爲 0 。 寫入一個 A1=1000 的數據時,需要進行 H 次 hash 函數的運算(這裏爲 2 次);與 HashMa

原创 數據結構和算法之兩個有序的鏈表合併

/** * 兩個有序鏈表合併 * Author : BlueSky 2019.10.29 * Function : 兩個有序鏈表合併爲一個新的有序鏈表並返回 * Example: * 輸入:1->2->4, 1->3-

原创 數據結構和算法之Java實現歸併排序

思路: 1、寫出遞推公式:merge_sort(p…r) = merge(merge_sort(p…q), merge_sort(q+1…r)) 2、判斷終止條件:head >= tail 3、分治遞歸 4、排序後,合併兩個有序

原创 數據結構和算法之單鏈表反轉

/** * 單鏈表反轉 * Author : BlueSky 2019.10.29 * Function:把每個節點的指針域由原來的指向下一個節點變爲指向其前一個節點 * Example: * 輸入: 1->2->3-

原创 數據結構和算法之美總結——鏈表以及應用場景

文章目錄底層結構數據插入數據查詢應用場景舉例以及代碼實現求鏈表的中間結點 底層結構 數組是需要連續的一整塊內存來進行存儲的,因此如果說開闢一個非常大的內存的話,如果JVM連續性內存不夠那麼就會開闢失敗。而鏈表相反,它通過指針將零

原创 數據結構和算法之數組右移K

基本思路:不開闢新的數組空間的情況下考慮在原屬組上進行操作 將數組倒置,這樣後k個元素就跑到了數組的前面,然後反轉一下即可 同理後 len-k個元素只需要翻轉就完成數組的k次移動 public class ArrayKShif

原创 數據結構和算法之求兩個鏈表相交的點

思路 對於兩個鏈表相交於一節點,則在這個節點之後的所有結點都是兩個鏈表所共有的 兩個鏈表的最後一個點的數據肯定是相同的 求出兩個鏈表的長度,相減結果爲K 利用雙指針,長的鏈表的先走K個點,然後取循環判斷兩個鏈表最後一個點是否相同

原创 數據結構和算法之鏈表是否有環

/** * 鏈表是否有環 * Author : BlueSky 2019.10.29 * 思路:利用快慢指針 */ public class RingLinkedList { public static Bool

原创 數據結構和算法之LRU緩存淘汰算法

思路: 維護一個有序單鏈表,越靠近鏈表尾部的結點是越早之前訪問的。當有一個新的數據被訪問時,我們從鏈表頭開始順序遍歷鏈表。 如果此數據之前已經被緩存在鏈表中了,我們遍歷得到這個數據對應的結點,並將其從原來的位置刪除,然後再插入到

原创 數據結構和算法之數組實現環形隊列

思路: 1、循環隊列和非循環隊列類似,但是要注意隊列空和隊列滿的情況 2、隊列空 tail = head 3、隊列滿 (tail+1)%capacity = head /** * 循數組實現循環隊列 * Author :

原创 Https原理及流程

原文鏈接 我們知道,HTTP請求都是明文傳輸的,所謂的明文指的是沒有經過加密的信息,如果HTTP請求被黑客攔截,並且裏面含有銀行卡密碼等敏感數據的話,會非常危險。爲了解決這個問題,Netscape 公司制定了HTTPS協議,HTT

原创 數據結構和算法之判斷對稱二叉樹

思路 根節點相等,左子樹的左子樹和右子樹的右子樹對稱,左子樹的右子樹和右子樹的左子樹對稱 直接上代碼: package com.zyblue.fastim.common.algorithm; /** * 判斷是否是對稱二叉

原创 數據結構和算法之數組實現隊列

思路 1、利用雙指針分別指向頭結點和尾結點來控制先進先出的特性。 2、每次出隊操作,將後面的數據向前移一位,來解決頭和尾指針向後移動以至於不能插入新數據的問題,但是時間複雜度比較高,出隊時間複雜度會由O(1) 變爲 O(n),不