线性枚举(C语言)
1.求最大值
比如求一个线性表中的最大值,可以先设定一个最大值,把它初始化为一个非常小的数,然后遍历给定的线性表,将其中的每个元素和目前的最大值比较,如果比它大,则更新这个最大值;
如果比它小,就不做任何处理。遍历完毕返回最大值就是我们要求的解了。写成伪代码如下:
最大值 = 非常小的数
for 当前元素 in 给定的线性表
if 当前元素 > 最大值
最大值 = 当前元素
返回最大值
2.求和
求一个线性表中元素的和,可以先设定一个求和的值,初始化为0,然后遍历给定的线性表,
将当前元素的值累加到求和变量上,最后返回求和变量的值,就是我们要求的解了。
求和=0
for 当前元素 in 给定的线性表:
求和=求和+当前元素
返回求和的值
3.时间复杂度
线性枚举的时间复杂度为O(nm),其中n是线性表的长度。m是每次操作的量级,对于求最大值和求和来说,因为操作比较简单,所以为1,则整体的时间复杂度是O(n)的。这是因为线性枚举需要遍历列表中的每个元素。在处理大规模数据时,可能需要使用更高效的算法来提高搜索速度。
4.优缺点
4.1优点
线性枚举是一种简单直观的算法,容易理解和实现,也是暴力算法中最简单的一种。
4.2 缺点
线性枚举的时间复杂度较高,对于大规模数据集可能效率较低。
5.线性枚举的优化
5.1二分查找
如果线性表已排序,可以通过二分查找来提高效率。
5.2哈希表
可以使用哈希表来存储已经搜索过的元素,避免重复搜索。
5.3前缀和
可以存储前ⅰ个元素的和,避免重复计算。
5.4双指针
可以从两头开始搜索,提升搜索效率。
6.结论
线性枚举是一种简单而有效的算法思想,它可以用于解决许多基本的算法问题。虽然它的时间复杂度较高,但在处理小型数据集时仍然是一种常用的算法。在实际应用中,我们可以根据具体情况选择是否使用线性枚举,或者使用其他更高效的算法来提高程序的效率。
7.实战
7.1力扣1550. 存在连续三个奇数的数组
给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;否则,返回 false
。
bool threeConsecutiveOdds(int* arr, int arrSize) {
for(int i = 0; i + 2 < arrSize ; i++){
int a = arr[i];
int b = arr[i+1];
int c = arr[i+2];
if(a % 2 == 1 && b % 2== 1 && c % 2 == 1){
return true;
}
}
return false;
}
7.2力扣485.最大连续1的个数
给定一个二进制数组 nums , 计算其中最大连续 1 的个数。
int findMaxConsecutiveOnes(int* nums, int numsSize) {
int pre = 0;
int max = 0;
for(int i = 0; i < numsSize ; i++){
if(nums[i] == 1){
pre++;
if(pre > max){
max = pre;
}
}
else{
pre = 0;
}
}
return max;
}
7.3力扣540 有序数组中的单一整数
给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。
请你找出并返回只出现一次的那个数。
你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。
int singleNonDuplicate(int* nums, int numsSize) {
if(numsSize == 1){
return nums[0];
}
for(int i = 1; i < numsSize - 1; i++){
if(nums[i] != nums[i+1] && nums[i] != nums[i-1]){
return nums[i];
}
}
if(nums[0] != nums[1]){
return nums[0];
}
return nums[numsSize - 1];
}
线性枚举(C语言)的更多相关文章
- R语言中的线性判别分析_r语言 线性判别分析
R语言中的线性判别分析_r语言 线性判别分析 在R语言中,线性判别分析(Liner Discriminant Analysis,简称LDA),依靠软件包MASS中有线性判别函数lqa()来实现.该函数 ...
- 线性表 - C语言完整实现
#include <stdio.h> #define false 0 #define true 1 #define MAXSIZE 20 typedef int bool; typedef ...
- 伪随机数(线性同余法)C语言
/**Keil Lib*2015.6.12*Pass*by lort*/uint32 Srandx ; uint32 SrandK = 1103515245;//0x41C64E6D;uint32 S ...
- 枚举java语言中的修饰符组合
package model; /*22:37 2019/7/20*/ /* top class的修饰符组合 abstract final public 2 * 2 * 2 warning: abstr ...
- C++语言对C的增强(2)—— const增强、枚举的增强
1.const基础知识 #include <iostream> int main(void) { //const定义常量--->const意味着只读 const int a; int ...
- windows官方多语言方案
编写 Win32 多语言用户界面应用程序 Windows 2000 针对全球市场制定了新的增强支持标准,提供了许多国际化功能,例如完全支持 Unicode.预设支持数百种语言以及用于从右向左语言的镜像 ...
- 1、c++对c语言的扩展
1.类型增强 检查更加严格 比如,把一个 const 类型的指针赋给非 const 类型的指针.c 语言中可以通的过,但是在 c++中则编不过去 ; int b = a; const int *pa ...
- 5、数组&字符串&结构体&共用体&枚举
程序中内存从哪里来 三种内存来源:栈(stack).堆(heap).数据区(.date): 栈(stack) 运行自动分配.自动回收,不需要程序员手工干预: 栈内存可以反复使用: 栈反复使用后,程序不 ...
- 04C++const增强、枚举的增强
#include <iostream> int main(void) { //const定义常量--->const意味着只读 const int a; int const b; // ...
- Codeforces J. Sagheer and Nubian Market(二分枚举)
题目描述: Sagheer and Nubian Market time limit per test 2 seconds memory limit per test 256 megabytes in ...
随机推荐
- Java jdk版本对照表
这里将JDK版本和major.minor的版本的对照关系进行整理,作为今后查阅的依据. 序号 jdk版本 major.minor version 1 1.1 45 2 1.2 46 3 1.3 47 ...
- BOM 相关知识总结
一:介绍BOM 1 1.什么是BOM? 2 DOM就是一套操作HTML标签的API(接口/方法/属性) 3 BOM就是一套操作浏览器的API(接口/方法/属性) 4 5 2.BOM中常见的对象 6 w ...
- 2024九省联考 数学 T19
寒假有朋友打电话吐槽九省联考,看了眼数学卷子感觉非常刺激.刚开学没事干,试着做一下 \(19\). (\(17\) 分) 离散对数在密码学中有重要的应用.设 \(p\) 是素数,集合 \(X=\{1, ...
- 使用FastAPI来开发项目,项目的目录结构如何规划的一些参考和基类封装的一些处理
使用FastAPI开发项目时,良好的目录结构可以帮助你更好地组织代码,提高可维护性和扩展性.同样,对基类的封装,也可以进一步减少开发代码,提供便利,并减少出错的几率. 下面是一个推荐的目录结构示例: ...
- 检测 NAT 类型
使用 pystun3 pystun3 是一个用于获取 NAT 类型和外部 IP 的 Python STUN 客户端 安装: pip install pystun3 使用: pystun3 结果: NA ...
- WebShell流量特征检测_冰蝎篇
80后用菜刀,90后用蚁剑,95后用冰蝎和哥斯拉,以phpshell连接为例,本文主要是对这四款经典的webshell管理工具进行流量分析和检测. 什么是一句话木马? 1.定义 顾名思义就是执行恶意指 ...
- 傅里叶级数 傅里叶变换 FFT 时域 频域 功率谱 能量谱 功率谱密度PSD
傅立叶级数是基于周期函数的,如果我们把周期推广到
- RGB、HSV和HSL颜色空间
这个文章写的很清楚了 https://zhuanlan.zhihu.com/p/67930839
- 6.24.2 数据库&漏洞口令&应急取证
windows日志分析神器 logonTracer-外内网日志 github下载:#JPCERTCC/LogonTracer:通过可视化和分析 Windows 事件日志来调查恶意 Windows 登录 ...
- 后缀数组,SA
主要是 \(O(n\log n)\) 倍增求 SA. (为什么这么短) const int N = 1e6 + 9; int n; int sa[N], sa_tmp[N], rk[N], ork[N ...