原创 全組合(高效)

java中有三種移位運算符: << : 左移運算符,num << 1,相當於num乘以2 >> : 右移運算符,num >> 1,相當於num除以2 >>> : 無符號右移,忽

原创 第5章 初始化與清理

java中通過使用構造器,類的設計者可以確保每個 請注意由於構造器的名稱必須和類名完全相同,所以,每個方法首寫字母小寫的編碼風格並不適用於構造器。 java中的初始化與創建是綁在一起的,兩者不能分離。 相同的詞表達的是不同的含義

原创 阿里雲服務器

修改阿里雲服務器的主機名: vim /etc/hostname

原创 平面列表

思路 這道題是比較簡單的題,簡單的考察下遞歸的使用 代碼 private List<Integer> list = new ArrayList<Integer>(); // @param nestedList a list

原创 交叉字符串

思路 這道題開始考察了嘗試了兩個思路,這道題不能簡單的從相同的字母的個數是否相等下手。應該要想到字幕出現的順序。 最後使用了遞歸,但是一直感覺代碼的效率不高 代碼 String s1; String s2; S

原创 最長上升子序列

思路 這道題考察的是 動態規劃 , 這道題的思路和最大子段和是一樣的,曾經都寫過最長上升子序列,動態規劃的方程 可以見參考 代碼 public int longestIncreasingSubsequence(int[] nums)

原创 搜索二維矩陣 II

思路 其實總的思想就是二分查找,但是其中的一個技巧是當查找不到的時候返回 right 值,這時間的 right 值指向值的特性是 a[right] < target 其次需要注意的是一定要處理好 邊界條件 和特殊的 測試值 代碼 p

原创 53. 翻轉字符串

思路 首先翻轉字符串整體,然後對於每個單詞進行翻轉,兩次翻轉的函數使用同一個函數。翻轉函數的思路: 使用隊列 將String轉成char[],然後反過來存儲(下面就是使用的這種方法) 用兩個指針,進行前後字符的對換 StringBuil

原创 k數和

思路 這道題感覺是一個非常好的動態規劃的題目,動態規劃方程:d[i][j][target]=d[i−1][j][target]+d[i−1][j−1][target−a[i]]d[i][j][target]=d[i−1][j][targe

原创 三數之和

思路 感覺這道題自己的思路還是比較low的,感覺在效率上一點都不高。沒想到居然通過了(0.0)。 簡單記錄下 這道題使用了兩個小知識: 首先是降低複雜度,首先對於(i, j)和(j, i)是 不允許出現的。所以在for 循環中使用 j

原创 翻轉鏈表

思想 其實就是設置兩個指針 pointer1, pointer2 。同步的移動pointer1, pointer2 ,head 這3個指針。這 3 個指針的前後順序剛好是pointer1, pointer2 ,head。 這道題應該注意

原创 恢復旋轉排序數組

思路 這道題應該首先計算出來 每個數字到其 原位置 移動的距離。但是有一個陷阱是,當使用程序移動的 時候,有時間遇見 1, 3, 5 只是在幾個數之間交換的情形(死循環),所以要保證程序能夠跳的出來。 代碼 public void r

原创 子集

思路 這道題的思路很直觀,其實任何 2 個數字的全組合都是可以使用類似於00, 01, 10, 11來標誌。那麼自己維護一個二進制的數組,然後實現遍歷輸出即可。 感覺這道題考察了java的 comparable 和 comparato

原创 散點圖

代碼 畫直線 #我們通常引入的是分模塊pyplot ,大部分的功能都在這個包中 import matplotlib.pyplot as plt import numpy as np x = np.linspace(-1, 1,

原创 主元素 II

思路 本題主要考察的是map數組的使用,唯一的小技巧是在往map中添加元素的時候,時刻的判斷着 某個元素的數量是否超過總數的的 1/3 代碼 public int majorityNumber(List<Integer> nums)