1、存在连续三个奇数的数组(3分)
问题描述
给你一个整数数组 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
解题思路
- 从前向后依次遍历满足连续3个奇数元素情况即可。
代码实现
class Solution {
public:
bool threeConsecutiveOdds(vector<int>& arr) {
int i = 0, ans = 0;
for(; i < arr.size(); i++){
if(arr[i] % 2 != 0){
ans++;
if(ans == 3)
return true;
continue;
}
else
ans = 0;
}
return false;
}
};
运行截图
2、使数组中所有元素相等的最小操作数(4分)
问题描述
存在一个长度为 n
的数组 arr
,其中 arr[i] = (2 * i) + 1 ( 0 <= i < n )
。
一次操作中,你可以选出两个下标,记作 x
和y ( 0 <= x, y < n )
并使arr[x]
减去 1
、arr[y]
加上 1
(即 arr[x] -=1
且 arr[y] += 1
)。最终的目标是使数组中的所有元素都相等 。题目测试用例将会保证 :在执行若干步操作后,数组中的所有元素最终可以全部相等。
给你一个整数 n
,即数组的长度。请你返回使数组arr
中所有元素相等所需的最小操作数 。
示例 1:
输入:n = 3
输出:2
解释:arr = [1, 3, 5]
第一次操作选出 x = 2 和 y = 0,使数组变为 [2, 3, 4]
第二次操作继续选出 x = 2 和 y = 0,数组将会变成 [3, 3, 3]