개발/알고리즘
485. Max Consecutive Ones
ny0011
2021. 1. 22. 16:20
반응형
0, 1로만 이루어진 array에서 연속적으로 가장 긴 1의 길이 구하기
array 길이는 < 10^4 으로 널널하다
1. 첫 시도
1) zero의 index를 구한다
2) 인접한 두 zero index값의 차 -1 = 1의 길이
3) max(인접한 두 zero index값의 차 -1)
그리고 영접한 수많은 if문들ㅠㅠ
예외 처리
1) zero가 없을 때
2) zero만 있을 때
3) zeros의 for 문 전에 for문에서 체크하지 못하는 맨 처음과 맨 끝값은 따로 max로 구해준다
class Solution:
def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
zeros = []
for idx, num in enumerate(nums):
if num == 0:
zeros.append(idx)
if not zeros:
return len(nums)
if len(zeros) == len(nums):
return 0
_max = max(zeros[0],len(nums) - zeros[len(zeros)-1]-1)
for i in range(len(zeros)-1):
if zeros[i+1] - zeros[i]-1 > _max:
_max = zeros[i+1] - zeros[i]-1
return _max
41 / 41 test cases passed.
Status: Accepted
Runtime: 336 ms
Memory Usage: 14.5 MB
2. sample 308 ms submission
for문 한번 돌려서 끝
0을 만날 때까지 1의 길이를 세고
0을 만나면 현재까지 센 1의 길이와 최대 1의 길이를 비교
마지막 max() : 마지막 길이는 0이 없어서 비교 못하니까 해줌
class Solution:
def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
cons = 0
consmax = 0
for num in nums:
if num == 1:
cons = cons+1
else:
if cons > consmax:
consmax = cons
cons = 0
consmax = max(cons,consmax)
return consmax
leetcode.com/problems/max-consecutive-ones/
Max Consecutive Ones - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com