题目
给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;否则,返回 false 。
示例 1:
输入:arr = [2,6,4,1]
输出:false
解释:不存在连续三个元素都是奇数的情况。
示例 2:
输入:arr = [1,2,34,3,4,5,7,23,12]
输出:true
解释:存在连续三个元素都是奇数的情况,即 [5,7,23] 。
提示:
1 <= arr.length <= 1000
1 <= arr[i] <= 1000
来源:力扣(LeetCode)
解题思路
判断数组里三个连续的数是否都为奇数可以直接遍历整个数组,逐一判断,但是为了能让指针跳转的稍微快一些,我们可以将三个数字的情况分开来讨论,共有八种情况,我们用1代表奇数用0 代表偶数,三个连续的数可能存在以下八种情况:111,110,101,100,011,010,001,000,针对这八种情况指针(假设指针在第一个数字上)跳转的幅度分别为0,3,2,3,1,3,2,3,这样就可以稍微遍历的快一些,但是对于数组的尾部很可能会出现访问不到的错误,为此我们将数组的尾部单独拎出来处理。
class Solution:
def threeConsecutiveOdds(self, arr: List[int]) -> bool:
if len(arr)<3:
return False
i=0
while i<len(arr)-2:
if arr[i]%2:
if arr[i+1]%2:
if arr[i+2]%2:
return True
else:
i+=3
else:
if arr[i+2]%2:
i+=2
else:
i+=3
else:
if arr[i+1]%2:
if arr[i+2]%2:
i+=1
else:
i+=3
else:
if arr[i+2]%2:
i+=2
else:
i+=3
return True if arr[-1]%2 and arr[-2]%2 and arr[-3]%2 else False