Algorithm
本周选择的算法题是:Longest Consecutive Sequence。
规则
Given an unsorted array of integers nums, return the length of the longest consecutive elements sequence.
You must write an algorithm that runs in O(n) time.
Example 1:
Input: nums = [100,4,200,1,3,2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.
Example 2:
Input: nums = [0,3,7,2,5,8,4,6,0,1]
Output: 9
Constraints:
0 <= nums.length <= 105-109 <= nums[i] <= 109
Solution
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
ans, nums = 0, set(nums)
for num in nums:
if num - 1 not in nums:
current = num + 1
while current in nums:
current += 1
ans = max(ans, current - num)
return ans
Review
Google Objective-C Style Guide
最近一周反复看了这篇 Guide 很多次,深刻体会到其中总结的原则特别好:
- Optimize for the reader, not the writer
- Be consistent
- Be consistent with Apple SDKs
- Style rules should pull their weight
打算 Q3 按照此 Guide 结合 Clean Code 深度探索下好的代码规范。
Tip
最近开始用 Excalidraw,手绘风格的,还不错:

