Leetcode日記7

(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)

LeetCod75 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則繼續交換。


LeetCod59 Spiral Matrix II

1)用兩個下標對平方矩陣進行螺旋遍歷。



(2015/1/23)

LeetCod48 Rotate Image

1)一圈一圈向內作交換,一次變換4個點的位置。


LeetCod74 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)

LeetCod24 Swap Nodes in Pairs

1)使用4個指針來交換節點。


LeetCod29 Divide Two Integers

1)計算被除數中除數的個數。使用左移表示乘2。

2)使用long long型進行計算,防止溢出。

3)對結果進行溢出的判斷。32位int型表示的範圍從-2147483648~2147483647。


LeetCod31 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] ~ 最後一個元素,進行反轉。


LeetCod46 Permutations

同31題。


LeetCod34 Search for a Range

參考278 First Bad Version

1)計算中點座標時使用double型防止溢出。

2)注意遞歸調用時邊界的肯定條件。

相關文章
相關標籤/搜索