给你一个整数数组 arr
,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true
;否则,返回 false
class Solution {
public:
bool threeConsecutiveOdds(vector<int>& arr) {
int cnt = 0;
for (auto a : arr) {
if (a & 1) cnt ++;
else cnt = 0;
if (cnt >= 3) return true;
}
return false;
}
};
给你一个整数数组 bloomDay
,以及两个整数 m
和 k
。
现需要制作 m
束花。制作花束时,需要使用花园中 相邻的 k
朵花 。
花园中有 n
朵花,第 i
朵花会在 bloomDay[i]
时盛开,恰好 可以用于 一束 花中。
请你返回从花园中摘 m
束花需要等待的最少的天数。如果不能摘到 m
束花则返回 -1
。
class Solution {
public:
int n;
bool check(int d, vector<int>& bloomDay, int m, int k) {
int get = 0;
int cnt = 0;
for (int i = 0; i < n; i++) {
if (d >= bloomDay[i]) {cnt++;}
else { cnt = 0;}
if (cnt >= k) {
get++;
cnt = 0;
}
}
//cout << "day: " << d << " cat get " << get << endl;
return get >= m;
}
int minDays(vector<int>& bloomDay, int m, int k) {
n = bloomDay.size();
if (m > n) return -1;
if (k > n) return -1;
if ((long long)m * k > n) return -1;
int l = 0;
int r = 1e9 + 10;
while (l < r) {
int mid = (l + r) / 2;
if (check(mid, bloomDay, m, k)) r = mid;
else l = mid + 1;
}
return l;
}
};