线性枚举(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 ...
随机推荐
- 记录一次Ubuntu20.04死机经过!!!在Ubuntu下使用Chrome的“无痕式”窗口,如果打开标签页过多就会造成死机
这里要说的事情就是自己刚刚经历的事情,而且尝试了多次最后证明,在Ubuntu下使用Chrome的"无痕式"窗口,如果打开标签页过多就会造成死机. 如何在Ubuntu下安装Chrom ...
- Apache DolphinScheduler中ZooKeeperCDH不兼容问题的解决方案
背景 看到Apache DolphinScheduler社区群有很多用户反馈和讨论这块问题,针对不兼容的问题,不仅需要自己重新编译各一个新包,而且因为默认是使用zk-3.8的配置,所以会出现不兼容问题 ...
- 9组-Beta冲刺-1/5
一.基本情况(15分) 队名:不行就摆了吧 组长博客:9组-Beta冲刺-1/5 GitHub链接:https://github.com/miaohengming/studynote/tree/mai ...
- Python网页应用开发神器fac 0.3.0全新版本发布
大家好我是费老师,在Python生态中,有很多以Python为主要开发语言,实现网页应用开发的框架,其中最为知名的有Dash.flet.streamlit.gradio.nicegui等. 如果综合考 ...
- Codeforces Round 911 (Div. 2) D
Codeforces Round 911 (Div. 2) D D. Small GCD 题意 定义\(f(a,b,c)\)为\(a,b,c\)中较小两个数的\(gcd\),给定数组\(a_{1... ...
- ARM指令和Thumb指令的区别
ARM处理器的工作状态 https://blog.csdn.net/itismine/article/details/4753701?depth_1-utm_source=distribute.pc_ ...
- MFC中CString转int,double
CString str=L"123"; int n=_wtoi(str); //n=123 double d=_wtof(str); //d=123.0000 Vs2012中编译
- armbian挂载sd卡记录
mkdir -p /mnt/mmctouch /etc/init.d/mount.shvim /etc/init.d/mount.sh内容见图mount /dev/mmcblk1p1 /mnt/mm ...
- 使用C#爬取快手作者主页,并下载视频/图集
最近发现一些快手的作者,作品还不错,出于学习研究的目的,决定看一下怎么爬取数据.现在网上有一些爬虫工具,不过大部分都失效了,或者不开源.于是自己就写了一个小工具.先看一下成果: 软件只需要填写作者ui ...
- CSEC:香港城市大学提出SOTA曝光矫正算法 | CVPR 2024
在光照条件不佳下捕获的图像可能同时包含过曝和欠曝.目前的方法主要集中在调整图像亮度上,这可能会加剧欠曝区域的色调失真,并且无法恢复过曝区域的准确颜色.论文提出通过学习估计和校正这种色调偏移,来增强既有 ...