【LeetCode 簡單題】113-最大連續1的個數
阿新 • • 發佈:2018-11-27
宣告:
今天是第113道題。給定一個二進位制陣列, 計算其中最大連續1的個數。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除
(手動比心ღ( ´・ᴗ・` ))
正文
題目:給定一個二進位制陣列, 計算其中最大連續1的個數。
示例 1:
輸入: [1,1,0,1,1,1] 輸出: 3 解釋: 開頭的兩位和最後的三位都是連續1,所以最大連續1的個數是 3.注意:
- 輸入的陣列只包含
0
和1
。- 輸入陣列的長度是正整數,且不超過 10,000。
解法1。遍歷nums,遇1就count加1,反之把count放到res中,然後置0,在迴圈結束後還需手動新增count到res中,因為全1的情況就不會走else分支,所以需要手動新增,程式碼如下。
執行用時: 52 ms, 在Max Consecutive Ones的Python提交中擊敗了98.67% 的使用者
class Solution(object): def findMaxConsecutiveOnes(self, nums): """ :type nums: List[int] :rtype: int """ res = [] count = 0 for i in nums: if i == 1: count += 1 else: res.append(count) count = 0 res.append(count) # 避免全1的情況,在上述程式碼中未能append計算出的count return max(res) # 還有種方法可以省去在迴圈結束後還append(count) 在開始的地方新增一句nums.append(0),這樣可以保證在for迴圈中至少走一次else分支
解法2。其實上述程式碼用了多餘的空間,其實不必要儲存所有count的取值,簡化成只保留最大的count,程式碼如下。
執行用時: 52 ms, 在Max Consecutive Ones的Python提交中擊敗了98.67% 的使用者
class Solution(object): def findMaxConsecutiveOnes(self, nums): """ :type nums: List[int] :rtype: int """ max_con = 0 # 儲存最大的count計數 count = 0 for i in nums: if i == 1: count += 1 else: if count>max_con: max_con = count count = 0 if max_con < count: max_con = count return max_con
解法3。發現一種很聰明的做法,利用了nums元素的0、1這2種取值,程式碼如下。
執行用時: 56 ms, 在Max Consecutive Ones的Python提交中擊敗了87.17% 的使用者
class Solution(object):
def findMaxConsecutiveOnes(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
res = 0
sum_1 = 0
for i in nums:
sum_1 = sum_1*i + i
if sum_1 > res:
res = sum_1
return res
結尾
解法1:原創
解法2&解法3:LeetCode