• LeetCode c++:1550. 存在连续三个奇数的数组


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

    解题:

    1.

    class Solution {
    public:
        bool threeConsecutiveOdds(vector<int>& arr) {
            //进行对vector中的元素进行计数
            int len = arr.size();
            //元素小于三个直接返回false
            if( len < 3 )return false;
            //进行计算 x 之前的元素中的奇数的个数并将其存储在 PI[x] 中。
            unsigned int i,j,n=0;
            vector<int> PI(len,0);//对Pi中的len个元素进行初始化为0
            for(i = 0 ; i < len ; i ++)//计算奇数个数并放入PI[x]中
            {
                if(arr[i]%2 == 1)
                    n++;
                PI[i] = n;
                //cout<<n<<"    ";//用于测试
            }
            //计算,i,j差值为2,当PI[i]/PI[j]差值也为2时return false,否则return true;(前提:奇数开头)
            for(int i = 2 , j = 0 ; i < len ; i ++ , j ++)
            {
                if(PI[j]%2 ==1 && PI[i]-PI[j] == 2)return true;////////////////该处出现错误:对于数据【1,2,1,1】出错,但是找不到原因
    //
    PI[j]%2 ==1 用来判断开头是否是从奇数开始计算
    } return false; } };

    2.

    class Solution {
    public:
        bool threeConsecutiveOdds(vector<int>& arr) {
            //size可以用来直接进行对链表元素进行计数,length不行
            int len = arr.size();
            //元素小于三个直接返回false
            if( len < 3 )return false;
            //进行计算 x 之前的元素中的奇数的个数并将其存储在 PI[x] 中。
            unsigned int i,j,n=0;
            vector<int> PI(len,0);//对Pi中的len个元素进行初始化为0
            for(i = 0 ; i < len ; i ++)//计算奇数个数并放入PI[x]中,遇到偶数从0计数
            {
                if(arr[i]%2 == 1)
                    n++;
                else n = 0;
                PI[i] = n;
              //  cout<<n<<"    ";//用于测试
            }
            //从PI中存储的数据中进行查找3的数,如果能找到3代表存在三个连续奇数return true
            for(int i = 0 ; i < len ;i ++)
            {
                if(PI[i] == 3)return true;
                //if(PI[i]-PI[j] == 3)return true;
            } 
           return false; 
    
        }
    };
  • 相关阅读:
    DbUtils类的添加,修改,删除
    QueryRunner类的八种结果处理集
    中国传统文化---------斗地主----------
    剑指Offer42 左旋字符串
    剑指Offer41 反转单词顺序,单词字符顺序不变
    剑指Offer40 和为s的连续正数序列
    剑指Offer39 数组中寻找和为sum的两个数字
    剑指Offer36 数字在排序数组中出现的次数
    剑指Offer37 二叉树深度与平衡二叉树判断
    剑指Offer38 数组所有数字出现两次,只有两个出现了一次,找出这两个数字
  • 原文地址:https://www.cnblogs.com/pipi-rtq/p/13516067.html
Copyright © 2020-2023  润新知