1. 程式人生 > >左耳聽風-ARTS-第4周(2019/4/21-2019/4/27)

左耳聽風-ARTS-第4周(2019/4/21-2019/4/27)

足夠 沒有 stat != 列表 編程 數組 直接 比較

Algorithm

本周的算法題是刪除已排序數據中的重復數字(https://leetcode.com/problems/remove-duplicates-from-sorted-array/)。這道題比較簡單,基本思路是從開頭比較,遇到不同的數字,就進行替換

public static int removeDuplicates(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }

        int i = 0;
        for (int j = 1; j < nums.length; j++) {
            
if (nums[i] != nums[j]) { i++; nums[i] = nums[j]; } } return i + 1; }

Reading

這周看的英文文章是《Apply Functional Programming Principles》(https://97-things-every-x-should-know.gitbooks.io/97-things-every-programmer-should-know/content/en/thing_02/),本文中作者鼓勵使用函數式編程。掌握函數式編程可以大大提高代碼質量。深入理解和應用函數式編程,你的設計會有更高的引用透明性。引用透明性是指在給定相同輸入的情況下,無論何時何地調用,函數總會給出相同的結果。命令式代碼的缺陷可歸因於可變變量。最終的結果是把函數當參數來用,而不是引用成員變量。這樣更易於debug,更易於定位非法值的引入。之前是不知道函數式編程的這些好處的。

Tip

Java中HaseSet采用散列表數據機構快速的查找對象。散列表為每個對象計算一個散列碼(hash code),由對象的實例域產生的一個整數,所以不同數據域的對象將產生不同的散列碼。在自定義類中,要保持hashCode()和equals()兼容。

Java中,散列表用鏈表數組實現,每個鏈表成為桶(bucket)。要想查找表中對象的位置,需要先計算對象的散列碼,對桶數取余,得到的結果就是這個對象桶數的索引。如果該桶沒有其他元素,直接插入桶中就行。如果桶被占滿,這種現象被成為散列沖突(hash collision)。這時就需要與桶中所有對象進行比較,查看該對象是否已經存在。如果散列碼是合理且隨機分布的,桶數足夠大,需要比較的次數就會少。

Share

Java中關於集合的總結(https://www.cnblogs.com/minguo/p/10746720.html)

左耳聽風-ARTS-第4周(2019/4/21-2019/4/27)