算法网课笔记(二)——数组

算法网课笔记(七)——排序 三类常见排序 问题:插入排序和冒泡排序都是O(n²),为什么插入排序更收欢迎? 如何分析一个排序算法 1.最好,最坏。平均时间复杂度 2.时间复杂度的系数,常数,低阶 3.比较次数和交换次数 4.算法的内存消耗 原地排序指的是空间复杂度是O(1)的排序算法 5.算法的稳定性 即,如果序列中存在相同的值,经过排序后,相等元素的原有先后顺序不变 稳定性在实际应用中很重要 冒泡排序(Bubble Sort) def bubbleSort(nums): flag=0 n=len(nums) 阅读详情

为什么数组标号都从0开始

数组(Array)是一种线性表数据结构,用一组连续的内存空间,存储一组具有相同类型的数据。
因为“下标”的本质是“偏移(offset)”,即a[0]是偏移=0的地址,即首地址;a[k]是偏移=k的地址,地址计算公式如下
a[k]_address = base_address + k * type_size
如果下标从1开始,则计算公式需要变成
a[k]_address = base_address + (k-1)*type_size
CPU每次都需要多做一次减法指令,为了效率优化,所以选择则从0开始编号

线性表(Linear List)

数组、队列、链表、栈,等。
在这里插入图片描述

非线性表

二叉树、堆、图等
在这里插入图片描述

连续内存空间

此特性让数组有了随机访问的能力,但是也让数组的插入、删除等操作变得低效,因为要维护其连续性,需要做大量的数据搬移工作

PS:数组和链表的区别
数组支持随机访问,根据下标随机访问的时间复杂为O(1),适合用来查找
链表不支持随机访问,适合插入和删除,时间复杂度为O(1)

低效的插入

按照以上思想,数组插入数据,需要将后边的数据整体向后移动,空出插入位置,那么其平均 时间复杂就是(1+2+3…+n)/n=O(n)
但是,如果数组只被当做存储数据的集合,即不要求数组中数据有任何规律,那么可以用一个简单的办法实现插入:
直接将第k位的数据搬移到数组元素的最后,把新的元素直接放入第k个位置即可。
利用这种方法,在某些场景下,可以将复杂度降为O(1)
在这里插入图片描述

低效的删除

原本的思想和插入类似,不写
在某些场景下,不一定非要追求数组中数据连续性,所以我们将多次删除操作集中执行,可以提高删除效率,即,只有数组内存不足时,才执行一次集中删除的操作,以此减少删除操作导致的大量数据搬移工作。
PS:这就是JVM的标记清除垃圾回收算法的核心

数组越界问题

下列代码会无限打印输出,因为 i <=3 的“=”会导致数组越界。
因为,C语言中,除了受限内存,其他内存都可以自由访问,所以访问a[3]这个不存在的数组元素时,其会访问到某块内存地址上,而这个地址正好是存储变量 i 的地址(为什么??),导致a[3]=0,实际上是i=0,从而导致无限循环。
C语言中访问数组,本质就是访问连续内存,只要通过偏移计算的到的内存地址是可用的,则程序就可能不会报错。

int main(int argc, char* argv[]){
    int i = 0;
    int arr[3] = {0};  //声明arr数组包含3个元素,且初始全部=0
    for(; i<=3; i++){
        arr[i] = 0;
        printf("hello world\n");
    }
    return 0;
}

容器能否代替数组

各有优点,简单场景下数组就够用

PS:函数调动栈帧结构细节(操作系统or体系结构知识点)

算法网课笔记(四)——栈 栈 先进后出,后进先出,栈是一种操作受限的线性表,只允许在一段插入和删除 如何实现一个栈 顺序栈:用数组实现的栈 链式栈:用链表实现的栈 # 创建一个栈的class # 定义入栈和出栈操作 空间复杂度:入栈和出栈都是O(1) 时间复杂度:即使是支持动态扩容的栈,按照均摊时间复杂度算,也是O(1) 函数调用栈 操作系统会给每个线程分配一块独立的内存空间,这块内存被组织成栈结构,用来存储函数调用时的临时变量。每进入一个函数,先将其需要的临时变量作为一个栈帧入栈,当函数执行完成,返回值后,将该函数对应的栈帧出 阅读详情

相关推荐

算法网课笔记(一)——复杂度分析

课程来源 极客时间——数据结构与算法之美(王争) 概述 数据结构:一组数据的存储结构 算法:操作数据的一组方法 数据结构为算法的服务,算法要作用在特定的数据结构上 复杂度分析:算法时间和资源效率的考量,很重要 课程内容总览: 10个数据结构:数组,链表,栈、队列、散列表、二叉树、堆、跳表、图、Trie数 10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法 复杂度分析 事后统计法的缺点:1.测试结果依赖测试环境;2.测试结果受数据规模影响大 复杂度计算过程

chicken3wings的博客 733

剑指 Offer II 030. 插入、删除和随机访问都是 O(1) 的容器

设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构: insert(val):当元素 val 不存在时返回 true ,并向集合中插入该项,否则返回 false 。 remove(val):当元素 val 存在时返回 true ,并从集合中移除该项,否则返回 false 。 getRandom:随机返回现有集合中的一项。每个元素应该有 相同的概率 被返回。 示例 : 输入: inputs = [“RandomizedSet”, “insert”, “remove”, “insert”, “

weixin_45962741的博客 341

Visual Studio Git 使用指南

Visual Studio 2022深度集成了Git功能,提供了直观的图形界面管理源代码。本文详细介绍了VS中Git的使用方法:从环境准备、克隆/创建仓库开始,重点讲解了"Git更改"窗口的日常操作,包括查看修改、暂存文件、提交推送等。同时涵盖了分支管理、查看历史、解决冲突等核心功能,以及储藏、重置等高级操作。文章还提供了实用技巧,如提交规范、频繁提交等最佳实践。VS的Git集成覆盖了日常开发需求,图形界面与命令行可互补使用,适合各层次开发者高效管理代码版本。

guigenyi的专栏 1568

数据结构-数组

一.数组的概念 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。如下图所示: 二.数组的特点 1.数组根据下标随机访问,时间复杂度为O(1)。 2.数据的插入和删除和低效。 如果插入/删除数组末尾的数据,最好情况时间复杂度为 O(1) 如果插入/删除开头的数据,则最坏情况时间复杂度为 O(n) 平均情况时间复杂度也为 O(n)。 三.什么时候使用...

小马不奔腾的博客 358

手把手教你用CMake和MinGW64编译libuvc:静态链接与动态链接的选择

本文详细指导如何在Windows平台上使用CMake和MinGW64编译libuvc库,并深入探讨静态链接与动态链接的选择策略。通过对比两种链接方式在部署复杂度、内存占用和版本管理等方面的差异,帮助开发者根据项目需求做出最优决策,实现高效的USB摄像头开发。

weixin_29171087的博客 255

基于任务的后勤智能体:三段构建与演进设计探究

这是系统智能化的核心难点。例如,对于一个“加强连级滩头阵地防御”子任务,系统会根据防御时长、预期敌军攻击强度、地形等因素,计算出所需的弹药(不同弹种的具体数量)、构筑工事的器材、人员的给养和饮水量、以及医疗救护的药品和血包数量。首先进行分词、词性标注等基础处理,然后利用在军事语料库上训练的命名实体识别(NER)模型,提取出关键实体,如任务类型(“夺控作战”)、作战对象(“Y岛”)、时间约束(“D日H时”、“24小时内”)、成功标准(“建立稳固滩头阵地”)、保障重点(“弹药充足”、“及时救治”)等。

weixin_49042442的博客 1088

什么是数组?

今天要介绍的主角就是-数组,数组也是数据呈线性排列的一种数据结构。与前一节中的链表不同,在数组中,访问数据十分简单,而添加和删除数据比较耗工夫。这和什么是数据结构那篇文章中讲到的姓名按拼音顺序排列的电话簿类似。 数组 如上就是数组的概念图,Blue、Yellow、Red 作为数据存储在数组中,其中 a 是数组的名字,后面 [] 中的数字表示该数据是数组中的第几个数据,该数字也就是**数组下标,下...

武培轩 3380

从零构建:Esp32+Esp-IDF驱动ST7789屏幕并集成LVGL图形库

本文详细介绍了如何从零开始使用Esp32和Esp-IDF驱动ST7789屏幕并集成LVGL图形库。内容涵盖环境准备、SPI驱动配置、屏幕初始化、LVGL图形库集成及常见问题排查,帮助开发者快速实现高效稳定的显示解决方案。

weixin_42657024的博客 524

Python Numpy库教程

本章节主要介绍的是python的一个常用库numpy,通过本章教程希望能够掌握numpy库一些常用的方法。 简介 NumPy 是一个 Python 的第三方库,代表 “Numeric Python”,主要用于数学/科学计算。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。 使用 Numpy 我们可以轻松进行如下等计算: 数组的算数和逻辑运算。 傅立叶变换和用于图形操作的例程...

xjl271314的博客 3万+

Sony DPT RP1/CP1破解攻略

前言 自己有一台Sony DPT CP1和一台kindle,两个都已经用了很多年。直到最近发现微信读书上经常可以找到一些免费而且不错的书,所以就萌生了在两台机器上使用微信读书的想法。kindle比较容易实现,直接打开内置浏览器,进入微信读书网页版就行了,而Sony的电纸书则只能通过破解+安装微信读书的方式实现。大概弄了两三个小时吧,也遇到了一些问题,所以这里记录一下整个过程,希望能方便后来的使用者。 首先感谢HappyZ, osc_t5nbj8ds。前者是提供公开破解的方法的大神,后者则是解决了我遇到的问题

weixin_43467572的博客 1万+

2024年游戏策划最新面试题及答案

1. **游戏策划**:负责游戏设计和开发的创意和技术过程。2. **主要职责**:设计游戏玩法、故事、角色、世界等。4. **游戏机制**:定义玩家如何与游戏世界互动的规则。13. **引人入胜的角色**:深入的背景故事、个性特征。3. **游戏平衡**:确保游戏公平、有趣且具有挑战性。7. **RPG特点**:角色发展、故事驱动、玩家选择。12. **关卡设计技巧**:挑战性、流动性、视觉引导。11. **游戏关卡设计**:创建游戏世界的不同阶段。5. **游戏循环**:玩家在游戏中重复的行为模式。

guo162308的博客 2320

【暖*墟】 #洛谷提高网课# 8.1初级数据结构(1)

链表  当平时使用数组时,有时会遇到一些问题: 在删除一个数据时,为了保证数据的连续性, 需要将删除点右边的数据、全部往左移一格。 在插入一个数据时,为了保证数据的连续性, 需要将插入点右边的数据、全部往右移一格。  每次移动的时间复杂度为O(N),如果元素较多时会时间超限。  链表一个位置包括了自己位置上的值和下一个值所在的位置。 这样链表就可以实现O(1)的插入/删除,同时保...

flora715的博客 680

Vue - 萤石云监控 ezuikit 视频实例销毁方案,解决使用stop方法无法销毁EZUIKit实例或销毁后依然占用内存并且监控画面依然有声音问题(解决页面多个监控摄像头画面同时播放,翻页或关闭页

vue2,vue3,萤石,监控摄像头,萤石云销毁视频实例,退出页面销毁,stop销毁原视频流,占用内存怎么办,销毁后视频依旧在后台播放有声音,销毁视频播放器,页面上有多个视频画面怎么销毁某一个,stop方法不生效怎么办,浏览器非常卡,dom销毁,ezuikit-js萤石云播放器Vue中使用beforeDestory销毁播放器实例,调用萤石云ezuikit-js的视频对象销毁,vue使用萤石云监控视频录像回放,不销毁实例会出现离开页面后依旧有监控声音并且占内存问题,不好使,页面崩了,崩溃,视频监控太多,没有用

🏆 前端领域优质创作者 1万+

算法网课笔记(五)——队列

队列queue 先进先出,入队enqueue,出队dequeue 队列也是一种操作受限的线性表数据结构 具有额外特性的队列: 循环队列、阻塞队列、并发队列、、

chicken3wings的博客 332

手眼标定----眼在手上(eye-in-hand)

@TOC 标定之前你可以先拿个怡宝盖子进行测试。 第一步:打开halcon,采集,然后生成代码,显示十字架 第二步:把怡宝盖子放在十字架中心位置,在图像处理,找到怡宝盖子 第三步:找到怡宝盖子然后进行九点标定(眼在外帖子有讲),移动机器手然后分别拍9次照片,记录怡宝盖子坐标和当前机器坐标。这里移动到中心位置的时候记录一下单独记录一下坐标,等下要用。 顺序 第四步:拍完后利用vector_to_hom_mat2d算子求出矩阵,然后在利用write_tuple (HomMat2D, ‘路径’)进行保存。这里

苏州程序大白的博客 4280

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

算法网课笔记(三)——链表

常用缓存策略 FIFO、LFU、LRU 如何用链表实现LRU? 链表相关知识 结点、后继指针(next)、头结点、尾结点、前驱结点 循环链表、双向链表(next、pre) PS:在“删除某个指针指定的节点”或者“在某个指定节点前插入”这种操作中,双向链表复杂度是O(1),而单链表是O(n); 在“删除特定值的节点”的操作中,二者复杂度都是O(n) 链表在插入删除上,比数组优秀;而在随机访问上,数组为O(1),链表为O(n) 链表的内存相比数组会翻倍 此外,数组的连续内存机制,可以利用CPU的缓存机制,预读

chicken3wings的博客 237

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

算法网课:程序设计与算法(二)算法基础(python实现)

慕课-北大-程序设计与算法(二),算法基础:python实现

iven2166的博客 607

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

追梦算法网----团队数量

说明 芝加哥组织了一场激烈的军事竞赛,很多国家的军人慕名而来,他们要么是队友,要么是敌人。 现建立如下规则: 我的队友的队友,是我的队友; 我的敌人的敌人也是我的队友; 两个人只要是队友,就认为他们属于同一团队,现给你若干参赛军人之间的关系,请问:最多有多少个团队? 输入格式 第一行是一个整数N(2<=N<=1000),表示参赛的人数(从1编号到N)。 第二行M(1<=M<=5000),表示关于参赛者的关系信息的条数。 以下M行,每行可能是F p q或是E p q(1&

今天会营业的博客 1132

php 漏洞 获取sql,ThinkPHP Builder.php SQL注入漏洞( – 算法网

ThinkPHP Builder.php SQL注入漏洞(<= 3.2.3)的一次漏洞复现作业漏洞环境:docker漏洞分析首先,我们知道insert 方法存在漏洞,那就查看 insert 方法的具体实现。该方法位于thinkphp\library\think\db\Builder.php文件中,我们可以看到在函数开头调用了 parseData 方法,并将 $data 作为参数传入, $d...

weixin_32081953的博客 298

php libevent 定时器,PHP socket初探 — 含着泪也要磕完libevent(三) – 算法网

这段时间相比大家也看到了,本人离职了,一是在家偷懒实在懒得动手,二是好不容易想写点儿时间全部砸到数据结构和算法那里了。今儿回过头来,继续这里的文章。那句话是怎么说的:“自己选择的课题,含着泪也得磕完!”(图文无关,详情点击这里)。其实在上一篇libevent文章中(《PHP socket初探 — 硬着头皮继续libevent(二)》),如果你总结能力很好的话,可以观察出来我们尝试利用libeven...

weixin_26731219的博客 148

力扣网-探索初级算法-数组篇

本篇博客题目来自力扣网,分组为初级算法下的数组。适合作为数组方面的练习。上面刷题测试用例真的丰富,总是有很多考虑不到的地方。第一遍做完了,很多解法都不是最优解。主要是分享下。 探索初级算法—力扣网链接 数组 题目的话打开上面的链接就可以看到,这里就不复述了。 从排序数组中删除重复项 public int removeDuplicates(int[] nums) { int...

小jinx的博客 1231

c boost matlab 数组,c – 为什么std :: make_shared ()的性能比boost :: make_shared()好得多? - 算法网...

我一直在做一些现场性能测试1>std::shared_ptr, std::make_shared based on 'gcc 4.7.2' & 'VC10 implementation'2>boost::shared_ptr, boost::make_shared based on boost 1.47测试结果有点有趣.1>通常std版本表现更好,但特别是std :: m...

weixin_39624700的博客 420

多元线性回归算法python实现_机器学习(2)–单元、多元线性回归Python实现 – 算法网...

分享数据资源txt文件与源码PY:链接:https://pan.baidu.com/s/1L5YjhEH2W4jSV62tOsua1Q提取码:czai把txt放在py同级目录下即可。对numpy与Pyplot做了注解。梯度下降与正规方程在这种变量个数较小的情况下,正规方程明显好用的多,梯度下降还得去多次确定循环次数与学习率大小,找到适合的值。单变量线性回归,利用数据prices.txt,房价预测i...

weixin_34183908的博客 323

【找实习啊找实习(一)】

  由于听闻今年的就业形势不好(淘宝限招等事件),搞得我也慌了,所以特别开始早点准备。由于之前错过了tx的校招让我后悔不已,所以现在基本给笔试和面试的,我都会去。庆幸的是51之前就已经拿到了两份offer,还算比较满意了,但是其中也暴露了很多问题,在此做一个小结。 【网新恒天】 恒天的笔试面试是连在一起的,这倒是非常方便,可以一次性在学校解决,不用这么跑来跑去。   首先说说恒天这个公...

weixin_34314962的博客 151

图——详细学习笔记

@TOC 图的基本概念和术语 图:G=(V,E) Graph=(Vertex,Edge) V:顶点(数据元素)的又穷非空集合 E:边的有穷集合 无向图:每条边都是无方向的 有向图:每条边都是有方向的 例:G1和G2 完全图:任意两个点都有一条边相连 就上面两个图的话,图一有n个顶点,n(n-1)/2条边;图二n有个顶点,n(n-1)条边 稀疏图:有很少边或弧的图(有向图中带方...

Redmancy_的博客 1333

2.1数据结构 | 数组模拟链表、单调栈、单调队列、kmp算法

这是我的一个算法网课学习记录,道阻且长,好好努力。 关于 数组模拟链表、单调栈、单调队列、kmp算法

z1614605415的博客 204
上一篇: 算法网课笔记(一)——复杂度分析
下一篇: 算法网课笔记(三)——链表
chicken3wings
博客等级 码龄8年 32粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值