0
点赞
收藏
分享

微信扫一扫

LeetCode简单题之存在连续三个奇数的数组

成义随笔 2022-02-06 阅读 27

题目

给你一个整数数组 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

在这里插入图片描述

举报

相关推荐

0 条评论