1、数组

  • 数组是由相同类型的元素组成的数据集合,并且占据一块连续的内存,按照顺序存储数据。

1.1、数组的特性:

  • 数组元素通过下标获取数据
  • 数组对象初始化时,需要先指定数组容量大小,并根据容量大小分配内存。
  • 缺点:需要为所有的数据预先分配内存,可能存在空闲的区域没有得到充分利用。

1.2、动态数组

  • 先为数组分配较小的内存空间,然后在需要的时候,在数组中添加新的数据。
  • 当容量不足时,需要重新分配一块更大的空间,要把之前的数据复制到新的数组中,再把之前的内存释放。
  • 缺点:数据拷贝时,需要进行大量的额外操作。

2、指针

  • 能定位数据容器中(也就是内存中)某个数据的手段。也就是数据的句柄或者地址。

2.1、双指针

  • 双指针是一种解题方法
  • 方向相反的双指针经常用来求排序数组中的两个数字之和。通常分别指向数组的首位两端,根据结果值对两端的指针进行向中间移动。
  • 方向相同的双指针通常用来求正数数组中子数组的和或乘积。

3、LCR 006 两数之和

3.1、题目信息:

  • https://leetcode.cn/problems/kLl5u1/description/
给定一个已按照 升序排列  的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。
函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 0 开始计数 ,所以答案数组应当满足 0 <= answer[0] < answer[1] < numbers.length 。
假设数组中存在且只存在一对符合条件的数字,同时一个数字不能使用两次。示例 1:
输入:numbers = [1,2,4,6,10], target = 8
输出:[1,3]
解释:26 之和等于目标数 8 。因此 index1 = 1, index2 = 3 。示例 2:
输入:numbers = [2,3,4], target = 6
输出:[0,2]示例 3:
输入:numbers = [-1,0], target = -1
输出:[0,1]

3.2、解题思路

  • 输入一个整数数组和一个目标整数,要求从数组中找出两个数,要求他们的和等于目标整数,返回两个元素的下标数组

1)、暴力解法

  • 双层for循环,遍历数组获得整数元素,然后遍历其他元素,判断他们的和是否等于目标值
  • 时间复杂度n的平方,没有使用到数组元素是升序排序的特性
  • 代码简单,不实现

2)、哈希表解法

  • 遍历数组元素,遍历的过程中,判断目标值与遍历元素的差值,判断差值是否在哈希表中,如果存在则返回下标数组
  • 如果不存在,则将当前遍历的元素和下标值,保存到哈希表中
vector<int> twoSum(vector<int> &numbers, int target)
{vector<int> res;std::map<int, int> map;for (int i = 0; i < numbers.size(); i++){int num = target - numbers[i];if (map.find(num) != map.end()) // 存在,取出下标值{res.push_back(map[num]);res.push_back(i);break;}map[numbers[i]] = i;}return res;
}

3)、双指针解法

  • 定义两个下标,从数组的两端开始往中间遍历
  • 如果遍历到的两个元素的和等于目标值,则直接返回,如果两元素和大于目标值,则right角标左移,否则left角标右移
vector<int> twoSum(vector<int> &numbers, int target)
{vector<int> res;int left = 0;int right = numbers.size() - 1;while (left < right && target != (numbers[left] + numbers[right])){if (numbers[left] + numbers[right] < target){left++;}else{right--;}}res.push_back(left);res.push_back(right);return res;
}

4、总结

  • 数组特性,具有相同数据类型的数据集合,在内存中按顺序连续存储,数组对象就是数据的指针,可通过下标获取到数组中元素的值
  • 数组优缺点:可通过数组索引下标直接获取元素值,在数组尾部添加数据,插入与删除数据需要进行数据移动; 数组使用前需要预先分配内存,有可能有些内存没有使用到。
  • 动态内存,刚开始分配一个小容量的内存,当数据量增加时进行扩容,需要将原数据拷贝到新的数组中。
  • 指针概念,就是可以从内存中获取数据的方式
  • 双指针,是一种解题思路,分为相向指针和相反指针。
  • map数据结构使用,查找是否存在某个值使用find方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/91106.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91106.shtml
英文地址,请注明出处:http://en.pswp.cn/web/91106.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统-lecture2(操作系统结构)

回顾下lecture1 swap区域不可以马上执行&#xff0c;即虚拟内存的数据和指令不可以被执行&#xff0c;得交换回到内存区域 操作系统的服务 主要提供两种服务 面向普通用户&#xff1a;user interface面向程序员&#xff1a;应用级程序代码 为用户 为用户提供了操作包括但不…

内网服务器实现从公网穿透

从6月份tplink的ddns失效之后&#xff0c;对于部分在内网运行的服务器&#xff0c;从公网访问就收到了部分影响。有好几个朋友找来&#xff0c;寻求帮助&#xff0c;看看怎么恢复原来的机制&#xff0c;可以从公网互联网访问内网服务器。方案一&#xff1a;如果有动态公网的客户…

vcs-编译+仿真+dump波形【IMP】

VCS仿真分为两步式(编译/compilation仿真/simulation)和三步式(分析/analysis细化/elaborationsimulation/仿真);注2:analysis/分析是三步式flow中仿真design的第一步&#xff0c;在此阶段将使用vhdlan或vlogan分析VHDL、Verilog、SystemVerilog和OpenVera文件。下面的部分包括…

程序代码篇---python向http界面发送数据

在 Python 中向 HTTP 界面发送数据&#xff0c;本质上是模拟用户在网页上填写表单、点击提交按钮的过程。这在自动化测试、数据上报、接口调用等场景中非常常用。下面用通俗易懂的方式介绍具体方法、实例代码和解析。核心原理网页上的数据发送&#xff08;比如提交表单&#xf…

mybatis-plus由mysql改成达梦数据库

前置条件: 达梦数据库设置了大小写敏感,我比较菜,改不动!先这么凑合着用吧; 因为设置了大小写敏感,所以所有的sql语句都要加 引号; 这样是会报错的: SELECT remark,createDept,createBy,createTime,updateBy,updateTime FROM sys_oss_config这样才可以 SELECT "create_…

设计模式:外观模式 Facade

目录前言问题解决方案结构代码前言 外观是一种结构型设计模式&#xff0c;能为程序库、框架或其他复杂类提供一个简单的接口。 问题 假设你必须在代码中使用某个复杂的库或框架中的众多对象。正常情况下&#xff0c; 你需要负责所有对象的初始化工作、 管理其依赖关系并按正确…

【数据结构初阶】--二叉树(四)

&#x1f525;个人主页&#xff1a;草莓熊Lotso &#x1f3ac;作者简介&#xff1a;C研发方向学习者 &#x1f4d6;个人专栏&#xff1a; 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》 ⭐️人生格言&#xff1a;生活是默默的坚持&#xff0c;毅力是永久的…

三、平面度检测-差值法

方法一: dev_get_window (WindowHandle) *读取3通道彩色融合图 read_image (Image, ./XYZ彩色融合图.tiff) *拆分3个通道 decompose3 (Image, x, y, z) *将3个通道图像转换为3D模型 xyz_to_object_model_3d (x,y, z, ObjectModel3D) *显示动态3D模型 threshold (z, Regions,…

什么是数据编排?数据编排的流程、优势、挑战及工具有哪些?

目录 一、数据编排的定义与概念 1.数据编排的基本含义 2.数据编排与相关概念的区别 3.数据编排的重要性 二、数据编排的流程 1.需求分析&#xff1a; 2.数据源识别与连接&#xff1a; 3.数据抽取&#xff1a; 4.数据转换&#xff1a; 5.数据加载&#xff1a; 6.监控…

【C++算法】82.BFS解决FloodFill算法_被围绕的区域

文章目录题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;题目链接&#xff1a; 130. 被围绕的区域 题目描述&#xff1a; 解法 BFS一层层剥开。 C 算法代码&#xff1a; class Solution {// 定义四个方向的偏移量&#xff1a;右、左、下、上int dx[4] …

商汤发布具身智能平台,让机器人像人一样和现实世界交互

7月27日&#xff0c;在“大爱无疆模塑未来”WAIC 2025大模型论坛上&#xff0c;商汤科技重磅发布「悟能」具身智能平台。「悟能」具身智能平台以商汤具身世界模型为核心引擎&#xff0c;依托商汤大装置提供端侧和云侧算力支持&#xff0c;能够为机器人、智能设备提供强大的感知…

MCP工作原理

在谈MCP原理前&#xff0c;我们先谈谈MCP的技术前身—Function Calling。1.Function Calling技术在FunctionCalling技术出现之前&#xff0c;大语言模型虽然拥有强大的知识储备和语言理解能力&#xff0c;但是只能提供自身数据库已有的信息&#xff0c;无法和外界进行信息交互。…

VSCode手动版本更新

技术背景 使用VSCode的的过程中&#xff0c;如果打开了自动更新功能&#xff0c;每隔一段时间就会有更新提示。为了保持版本的稳定性&#xff0c;我们可以在设置中将Update: Mode设置为none&#xff0c;这样就不会触发自动更新。但有时又有版本更新的需求&#xff0c;可能是版本…

医疗超声成像专用AFE模拟前端

医疗超声成像作为一种广泛应用于临床诊断的重要技术&#xff0c;对于提供清晰、准确的医学图像起着关键作用。在超声成像系统中&#xff0c;AFE模拟前端扮演着至关重要的角色。它负责对超声换能器接收到的微弱电信号进行处理和转换&#xff0c;为后续的数字信号处理提供高质量的…

机器学习之线性回归——小白教学

一、线性回归简介1.什么是线性回归线性回归(Linear regression)是利⽤回归⽅程(函数)对⼀个或多个⾃变量(特征值)和因变量(⽬标值)之间关系进⾏建模的⼀种分析⽅式。特点&#xff1a;只有⼀个⾃变量的情况称为单变量回归&#xff0c;多于⼀个⾃变量情况的叫做多元回归线性回…

.NET 10 中的新增功能系列文章1——运行时中的新增功能

引言 随着 .NET 10 预览版6的发布&#xff0c;微软在运行时层面带来了一系列重要的性能改进和新功能。这些改进主要集中在JIT编译器优化、硬件指令集支持、内存管理等方面&#xff0c;旨在进一步提升应用程序的执行效率和资源利用率。本文将详细解析这些运行时增强功能&#x…

安宝特方案丨AI算法能力开放平台:适用于人工装配质检、点检、实操培训

当前工业AI图形识别算法的应用存在投入成本高、维护更新难、依赖固定相机、应用范围窄、与实际作业脱节等问题。 针对以上情况&#xff0c;安宝特提出了“AI算法能力开放平台”&#xff0c;目的是让AI图形识别算法可以与现场实际的人工点检作业、装配作业、质检作业、培训作业…

水下目标识别准确率↑89%!陌讯多模态融合算法在智慧水务的落地实践

一、行业痛点&#xff1a;智慧水务的检测困境据《2024城市水务智能化白皮书》统计&#xff0c;传统水务检测面临三大挑战&#xff1a;​​水体干扰​​&#xff1a;浑浊度>100NTU时&#xff0c;目标漏检率高达65%​​动态环境​​&#xff1a;水流扰动导致目标形变&#xff…

手动开发一个串口调试工具(三):基于 Qt Widgets 搭建串口调试界面

在上一篇中&#xff0c;我们通过 QCoreApplication 构建了一个基础的串口收发控制台程序&#xff0c;并实现了周期发送、十六进制转换和数据读取等核心功能。本篇将基于此逻辑&#xff0c;进一步将其封装为一个图形化界面程序&#xff0c;借助 Qt Widgets 提供的控件搭建完整的…

量子计算革命:重新定义计算的边界与未来

引言&#xff1a;我们正站在计算革命的新起点 当IBM在2019年宣布实现"量子霸权"时&#xff0c;很多人认为这只是实验室里的科学突破。然而&#xff0c;短短几年后&#xff0c;量子计算已经从理论走向实践&#xff0c;从实验室走向产业应用。我们正站在一个全新的计算…