原创 桶排序(Bucket sort)------時間複雜度爲O(n)的排序方法(一)

       之前我們分別分析了時間複雜度分別爲O(n²)和O(nlogn)的排序方法,接下來,我們來分析複雜度爲O(n)的排序方法,也稱爲線性的排序方法。        你可能會想,這幾種排序方法爲什麼能做到線性呢?其實,這幾種排序方法

原创 詳解二分查找(Binary Search)與其變形------java實現

       二分查找是一種簡單易懂的快速查找算法,時間複雜度也十分優秀,爲O(logn),即使是2的32次方規模的大數據,最多也只需比較32次即可找到。 思想分析:二分查找運用了二分思想,在一個有序的數據集合中,每次都跟待查找的區間中點

原创 歸併排序與快速排序------時間複雜度爲O(nlogn)的排序算法

      歸併排序與快速排序時間複雜度均爲O(nlogn),適合大規模的數據排序且很常用,它們都用到了分治思想,將大的問題分解成小問題來解決。接下來我們分別對其進行分析。 歸併排序(Merge Sort) 思路:歸併排序的核心思想是先分

原创 Jedis連接失敗解決:JedisConnectionException: Failed connecting to host localhost:6379

今天在使用Jedis連接redis時報如下錯誤 此時我的redis服務器端已正常打開,經過查看發現沒有將bind註釋掉以及關閉保護模式。 解決方法爲修改redis.conf配置,將此句註釋。 並將protected-mode修改爲n

原创 linux中下載及安裝redis

作爲一個linux小白,在linux環境完成redis下載及安裝時遇到了一些坑,通過此文章記錄下來。 下載redis wget http://download.redis.io/releases/redis-5.0.4.tar.gz 通

原创 JVM運行時數據區域(JVM內存模型)

    Java虛擬機在執行Java程序時會把它管理的內存劃分爲若干個不同的數據區域,這些區域各有用途,有的會隨着虛擬機進程的啓動而一直存在,有的會依賴用戶線程的啓動和結束而創建和銷燬,由此可分爲線程共享和線程私有的兩部分,如圖所示(來源

原创 JVM中對象的創建細節、內存佈局及訪問

       Java作爲一門面嚮對象語言,在運行過程中無時無刻都伴隨着對象的創建。在語言層面,我們常常是用new來進行一個對象的創建,而其在Java虛擬機中的細節卻要複雜許多,創建之後的內存佈局和訪問方式也值得探討,下面將以HotSpo

原创 一文帶你理解散列表(哈希表)

散列表(Hash Table)也叫哈希表,是一種在實際編程過程中被廣泛使用的數據結構,但是你是否真的理解它呢?本篇文章將從原理對其進行分析。 散列思想 下面舉一個例子,學校舉報運動會,長跑項目總共有60名選手參加,對每個選手按照年級+班級

原创 初次購買雲服務器用於部署項目詳細教程

當我們做好一個javaweb項目時,很希望可以將其放在公網上,這時候很多人就會選擇購買服務器,本篇文章將從頭到尾展示如何購買一個雲服務器。 購買服務器 現在有很多廠商出售各種服務器,這是一種比較快捷方便的方法,而且如果你是大學生,還可以享

原创 冒泡、插入和選擇排序------時間複雜度爲O(n²)的排序算法

本文通過圍繞三個問題來比較冒泡、插入和選擇排序這三個排序算法,加深對這三個排序算法的理解。 時間複雜度如何(執行效率)? 是否是原地排序算法(內存消耗)?排序是否需要申請額外的內存空間。 是否是穩定的排序算法(穩定性)?是否會改變相同

原创 快慢指針判斷迴文鏈表------LeetCode(234)

234.迴文鏈表 題目:請判斷一個鏈表是否爲迴文鏈表。 思考:能否用 O(n) 時間複雜度和 O(1) 空間複雜度解決此題? 分析:題目默認鏈表爲單鏈表,因爲鏈表與數組不同,數組支持隨機訪問,根據下標隨機訪問的時間複雜度爲O(1),而鏈表

原创 數據結構與算法------漸進時間複雜度分析

       在初學數據結構與算法的時候,複雜度分析的學習被我選擇性忽略了,刷算法題看題解時也是半知半解,也讓我在學習數據結構與算法的時候走了不少彎路。在最近迫於實習就業的壓力下,我也決定要把這塊難啃的骨頭啃下。 爲什麼要進行複雜度分析

原创 Java學習筆記——String類

在Java語言中字符串必須包含在一對雙引號(" ")之內,換句話說,被雙引號(" ")包圍的都是字符串,不能作爲其他數據類型來使用,如"1+2"的輸出不是3。 一、字符串的創建 1、String(char a[ ]) 2、String(c

原创 排序算法之希爾排序(Shell‘s Sort)——C語言實現

希爾排序(Shell‘s Sort)又稱“縮小增量排序”,它也是一種屬插入排序類的 算法。 希爾排序的基本思想是:先將整個待排序列分割成若干子序列分別進行直接插入排序,待整個序列中的記錄“基本有序”時,再對全體記錄進行一次直接插入排序

原创 排序算法之堆排序(Heap Sort)——C語言實現

堆排序(Heapsort)是指利用堆積樹(堆)這種數據結構所設計的一種排序算法,它是選擇排序的一種。 算法分析 在學習堆排序之前我們要先了解堆這種數據結構。 堆的定義如下:n個元素的序列{k1,k2,···,kn}當且滿足以下關係時,