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