线性枚举(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 ...
随机推荐
- tensorflow1.x——如何在C++多线程中调用同一个session会话
相关内容: tensorflow1.x--如何在python多线程中调用同一个session会话 ================================================= 从 ...
- centos7系统 通过编译安装gcc7.5.0
背景: 现有的centos7 gcc的最高版本为4.8.5 项目需要升级到7.1.0以上 正常方式可以通过以下命令即可完成升级: $ sudo yum install centos-release-s ...
- Python向IP地址发送字符串
在Python中,向IP地址发送字符串通常意味着你需要通过某种协议来实现通信.最常见的协议包括TCP和UDP.这里,我将分别给出使用TCP和UDP协议向指定IP地址发送字符串的示例代码. 1.TCP. ...
- 推荐2款实用的持续集成与部署(CI&CD)自动化工具
前言 最近DotNetGuide技术社区交流群有不少同学在咨询:持续集成与部署(CI&CD)自动化工具有什么好用的推荐?今天大姚给大家推荐2款实用且免费的持续集成与部署(CI&CD)自 ...
- Element-UI 中使用rules验证 金额 数字
data中定义验证规则:var checkCount = function (rule, val, callback) { if (!val) { return callback(new Error( ...
- C++ 项目目录结构
目录结构 project_root/ ├── bin/ # 可执行文件目录 │ ├── my_app # 可执行文件 │ └── ... # 其他可执行文件或脚本 │ ├── build/ # 编译产 ...
- 在 SQLAlchemy 中对数据异步处理的时候,获得关联集合的处理方式
我们在定义SQLAlchemy对象模型的关系的时候,用到了relationship 来标识关系,其中 lazy 的参数有多种不同的加载策略,本篇随笔介绍它们之间的关系,以及在异步处理中的一些代码案例. ...
- 2023.7.2-3-4Mssql xp_cmdshell提权
1.概念 Mssql和SQL sever的一个产品的不同名称.都属于微软公司旗下.而上述Mssql xp_cmdshell提权也属于数据库提权的一种. 主要依赖于sql server自带的存储过程. ...
- 使用 nuxi init 创建全新 Nuxt 项目
title: 使用 nuxi init 创建全新 Nuxt 项目 date: 2024/9/6 updated: 2024/9/6 author: cmdragon excerpt: 摘要:本文介绍了 ...
- .NET 6.0 + WPF 使用 Prism 框架实现导航
前言 Prism 一个开源的框架,专门用于开发可扩展.模块化和可测试的企业级 XAML 应用程序,适用于 WPF(Windows Presentation Foundation)和 Xamarin F ...