一.概念
线性枚举(Linear Enumeration)是一种基本的算法设计思想,用于在一个线性表中索引某个特定元素,并且做出相应的操作。 线性枚举是一种顺序搜索算法,从线性表的第一个元素开始,根据特定的判断条件,做出相应的行为。 变种比较多,最常见的就是 求最值、求和 等等
二.常见用法
1.求最大值
先定义一个很小的数为最大值,然后遍历比较,比它大的赋值为最大值
2.求和
定义一个sum,然后遍历所有数,加到sum。
三.枚举细节
四.练习题
1.存在连续三个奇数的数组
class Solution {
public:
bool threeConsecutiveOdds(vector<int>& arr) {
for(int i = 0;i+2 <arr.size();i++){
if(arr[i] % 2 !=0 && arr[i+1] % 2 !=0 && arr[i+2] % 2 !=0){
return true;
}
}
return false;
}
};
2.最大连续 1 的个数
class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int pre = 0;//缓存连续1的个数
int max = 0;//真实存放连续1的总数
for(int i = 0;i < nums.size();i++){
//如果是1,pre就+1,然后pre给真实计数的max;如果不是1,pre清0
if(nums[i] ==1){
pre +=1;
if(pre > max){
max = pre;
}
}else{
pre = 0;
}
}
return max;
}
};
3.有序数组中的单一元素
class Solution {
public:
int singleNonDuplicate(vector<int>& nums) {
//先判断第2个元素到第倒数第2个元素
for(int i = 1;i <nums.size() -1;i++){
if(nums[i] != nums[i+1] && nums[i+1] != nums[i+2]){
return nums[i+1];
}
}
//然后判断第一个元素
if(nums.size() == 1 || nums[0] != nums[1]){
return nums[0];
}
//最后判断最后一个元素
return nums.back();
}
};