(2015/1/2)算法
LeetCode 318 Maximum Product of Word Lengths數組
題目:數據結構
1)求一個字符串數組中,兩個不一樣的字符串的長度乘積的最大值。ide
2)這兩個字符串不能共同擁有同一個字符。(兩個字符串的長度能夠不相同)spa
3)全部字符串只由小寫字符組成。指針
4)若不存在這樣的兩個字符串則返回0。code
使用的數據結構:orm
1)定義一個結構體,第一個成員表示字符串的長度;第二個成員表示這個字符串擁有哪些小寫字母。排序
2)第二個成員使用unsigned int,如有某個字母則相應位置1。(使用邏輯或和移位操做)遞歸
3)使用vector存放結構體。
若使用multimap數據類型則會出錯,待研究。
(2015/1/3)
LeetCode 319 Bulb Switcher
1)使用模擬開關燈的方法不太現實。
2)一個燈被toggle 的次數與它的因子個數相同。若它有偶數個因子則最後是關閉的,奇數個則是打開的。
3)一個數只有其開根號後是整數時,它纔有奇數個因子。
LeetCode 141 Linked List Cycle
解法1:使用set。
解法2:參考https://leetcode.com/discuss/32906/o-1-space-solution
1)使用兩個結點指針。
2)一個指針一次走一步,一個指針一次走兩步。
3)如有循環,則兩個指針最後會相等。
LeetCode 137 Single Number II (想不到)
參考:https://leetcode.com/discuss/6632/challenge-me-thx
思路:若某一位上1只出現1次,則此位爲1;以後1每出現3次,則此位變回最初狀態。
(用狀態轉換圖表示爲(bit1bit0):00->01->10->00,bit0位符合上面的描述,使用bit1和bit0用於記錄3中狀態)
LeetCode 35 Search Insert Position (簡單)
LeetCode 116 Populating Next Right Pointers in Each Node
解法1:使用隊列。(簡單,速度較慢)
解法2:參考https://leetcode.com/discuss/7327/a-simple-accepted-solution
1)一個指針指向每一層的第一個結點,用於層的遍歷。
2)另外一個指針對每一層的節點進行遍歷(利用上一層對當前層的next指針賦值後的結果,進行遍歷),完成對下一層結點的修改。
LeetCode 53 Maximum Subarray
參考算法導論,分治策略。
注意細節。
(2015/1/5)
LeetCode 62 Unique Paths
1)判斷形參
2)創建二維數組
LeetCode 22 Generate Parentheses
遞歸:根據還有幾個'('或')'來選擇加入'('或')'。
LeetCode 153 Find Minimum in Rotated Sorted Array
1)排序:速度較慢
2)直接遍歷:速度塊
LeetCode 121 Best Time to Buy and Sell Stock
1)分治策略:相似最大子數組;注意收益爲負的狀況;速度較慢。
2)DP。
(2015/1/17)
LeetCode 75 Sort Colors
方法1:只需算出每種顏色的數目便可。(a two-pass algorithm)
方法2:one-pass algorithm
參考:https://leetcode.com/discuss/17000/share-my-one-pass-constant-space-10-line-solution
1)使用兩個變量,一個表示下一個要存放0的位置,一個表示下一個要存放2的位置。
2)用變量i遍歷,遇到0則往前交換,若交換出來的仍是0則繼續交換。
遇到2則日後交換,若交換出來的仍是2則繼續交換。
LeetCode 59 Spiral Matrix II
1)用兩個下標對平方矩陣進行螺旋遍歷。
(2015/1/23)
LeetCode 48 Rotate Image
1)一圈一圈向內作交換,一次變換4個點的位置。
LeetCode 74 Search a 2D Matrix
方法1:
按順序尋找在哪一行,折半查找在哪一列。(速度在第二梯隊)
方法2:
1)參考:https://leetcode.com/discuss/10735/dont-treat-it-as-a-2d-matrix-just-treat-it-as-a-sorted-list
2)把二維數組當作一維數組進行折半查找。訪問元素時把一維數組的下標轉換爲二維數組中的下標,訪問二維數組。
(2015/1/24)
LeetCode 24 Swap Nodes in Pairs
1)使用4個指針來交換節點。
LeetCode 29 Divide Two Integers
1)計算被除數中除數的個數。使用左移表示乘2。
2)使用long long型進行計算,防止溢出。
3)對結果進行溢出的判斷。32位int型表示的範圍從-2147483648~2147483647。
LeetCode 31 Next Permutation(can't)
題目大意:
找到下一個字典序排列。
參考:https://leetcode.com/discuss/38247/algorithm-wikipedia-implementation-permutations-permutations
1)找到最大的k,使nums[k] < nums[k + 1],若這樣的k不存在,則對整個nums進行反轉。
2)找到最大的l,l > k,且nums[k] < nums[l],交換nums[k]和nums[l]。
3)對序列:nums[k + 1] ~ 最後一個元素,進行反轉。
LeetCode 46 Permutations
同31題。
LeetCode 34 Search for a Range
參考278 First Bad Version
1)計算中點座標時使用double型防止溢出。
2)注意遞歸調用時邊界的肯定條件。