原创 [LC] 358. Rearrange String k Distance Apart

  這一題最主要的核心思想是貪心法。貪心的方式是這樣的:在決定下一個字符的時候,總是尋找在可用的字符中(也就是上一次出現的位置距離當前遍歷的位置有k的距離或者還沒有使用過),還可以使用次數最多的字符。如果在運行過程中可用的字符集合爲空,

原创 [LC] 348. Design Tic-Tac-Toe

這一題,我對它的follow up 其實感到略微好奇,因爲我其實不知道O(n^2)是怎麼做的,我只知道O(n)乃至O(1)的做法。 O(n) 做法如下。 第一種比較直觀,需要O(n^2)的空間,用於真實裝一個棋盤的數據。每次更新一個位

原创 [LC] 349. Intersection of Two Arrays

這題真的很沒有營養,一個HashSet就能解決的問題。如果真的要變個花樣不用任何空間,排個序也可以,真的沒有什麼好思考的,直接給代碼就好了。 public int[] intersection(int[] nums1, int

原创 [LC] 350. Intersection of Two Arrays II

這一題和https://blog.csdn.net/chaochen1407/article/details/99679944 其實思路是差不多的,就是加一個counter而已。同樣還是兩種辦法:哈希表做對比統計;排序之後然後兩個指針在

原创 [LC] 347. Top K Frequent Elements

  這題做法其實不止一種。最直觀的做法就是用heap,在java裏就是PriorityQueue。用一個大小爲k的最小堆來做,對每個數字出現的次數做統計,保留出現次數最大的k個即可。當然你放在PriorityQueue裏面的不能是一個簡

原创 [LC] 345. Reverse Vowels of a String

這題真的沒啥技術含量,頭尾指針往中間掃,遇到元音字符就交換就好了。。直接給代碼 public String reverseVowels(String s) { int head = 0, tail = s.le

原创 [LC] 341. Flatten Nested List Iterator

這一題一種最直接的做法就是先真的做一個完整的flatten放到一個list裏面,然後就很簡單的iterate這個list就好。flatten的過程就用遞歸的dfs做就好了。根據這個思路,就可以得到代碼如下: public class

原创 [LC] 340. Longest Substring with At Most K Distinct Characters

我感覺不到這一題和https://blog.csdn.net/chaochen1407/article/details/44041185 有什麼本質上的差別。基本都是一樣的思想,用快慢指針維護一個窗口,快指針就走最普通的for循環遍歷方

原创 [LC] 339. Nested List Weight Sum

這題實在是簡單的已經沒法再解釋啥了。最基本的圖論題。想用bfs也行,用dfs也行, 只要在遍歷的過程裏記得自己是哪一層的即可。搞定,下面就給出dfs的代碼: class Solution { public int depthS

原创 [LC] 338. Counting Bits

  先來個簡單版本的答案, 就是對每個數字進行bit count。count的方法已經很爛大街了,就不闡述了。 public int[] countBits(int num) { int[] result =

原创 [LC] 336. Palindrome Pairs

這一題有着最straight forward的做法。就是把每倆個字符串組裝一下然後檢查一下是否是Palindrome。思路非常明白。代碼如下: public List<List<Integer>> palindromePair

原创 [LC] 334. Increasing Triplet Subsequence

這一題,也沒有很繁雜的思路。只需要遍歷一遍,並在遍歷的過程裏記住兩個數字就行了,一個是當前最小的數字,第二個數字,如果我們稱爲min2,這個min2的更新條件是如果當前遍歷到的數字大於最小值但小於當前的min2,便將min2更新爲當前的

原创 [LC] 332. Reconstruct Itinerary

這一題並不是我個人很喜歡的題目類型。最優解基本就是特定的算法,知道就能過,不知道也不是你能短時間裏想出來的解決方案。這題就是歐拉路徑的題目,給定起點和所有邊的信息,在不重複的情況下走完全圖。 https://ikely.me/2015/

原创 [LC] 329. Longest Increasing Path in a Matrix

感覺上這一題是hard裏面比較easy的。基本上就是一個帶cache的dfs。建立一個result數組,result[i][j]代表了(i, j)爲起點的Longest Increasing Path的長度,0表示還未被遍歷過。循環遍歷

原创 [LC] 325. Maximum Size Subarray Sum Equals k

這一題的follow up要求是複雜度O(N),很抱歉,我不知道O(n)以外的做法。這題的解法的關鍵點主要是以下兩點: 1. sum[m .. n] = sum[1..n] - sum[1..m - 1] 2. k = sum[m ..