算法-线性枚举
一.概念
线性枚举(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清0if(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();}
};