重庆住房城乡建设厅官方网站,惠州seo顾问,自己的网站怎么优化,WordPress模板转换emlog数组#xff1a;基础概念、存储特性及力扣实战应用 在计算机科学与数学的广袤领域中#xff0c;数组作为一种极为重要的数据结构#xff0c;发挥着不可或缺的作用。它就像一个有序的 “数据仓库”#xff0c;能高效地存储和管理大量数据。接下来#xff0c;让我们深入了解…数组基础概念、存储特性及力扣实战应用 在计算机科学与数学的广袤领域中数组作为一种极为重要的数据结构发挥着不可或缺的作用。它就像一个有序的 “数据仓库”能高效地存储和管理大量数据。接下来让我们深入了解数组的奥秘。
一、数组的维度与数学表示
一向量与一维数组 在数学世界里向量可表示为\(A (a_0, a_1, \cdots, a_{n - 1})\)。对应到计算机编程中这便是一维数组的概念 —— 由n个元素按顺序依次排列而成每个元素\(a_i\)\(i 0, 1, \cdots, n - 1\)都在数组里有着独一无二的位置。例如在存储学生成绩时我们可以创建一个一维数组数组中的每个元素分别对应一位学生的成绩方便快捷地对成绩数据进行处理和管理。
二矩阵与二维数组 矩阵的数学表达式为\(A_{m×n}\begin{bmatrix}a_{00}a_{01}\cdotsa_{0,n - 1}\\a_{10}a_{11}\cdotsa_{1,n - 1}\\\cdots\cdots\cdots\cdots\\a_{m - 1,0}a_{m - 1,1}\cdotsa_{m - 1,n - 1}\end{bmatrix}\)。二维数组可视作由m行n列元素构成的矩阵其中每个元素\(a_{ij}\)\(i 0, 1, \cdots, m - 1\)\(j 0, 1, \cdots, n - 1\)都能通过其所在的行和列唯一确定。在表示棋盘状态时二维数组大显身手棋盘上每个格子的信息都能精准地存储在对应的数组元素中。
三n 维数组的概念拓展 随着维度的增加数组变得更加复杂和灵活。当数组的下标由n个数组成时就形成了n维数组。访问这类数组中的元素需要用到n个索引值。以三维数组为例它常被用于三维图形处理、气象数据存储涉及空间的x、y、z坐标以及时间等维度等场景。依此类推n维数组能够借助n个下标确定唯一的元素为处理复杂的数据关系和多维数据集合提供了强大的支持。
二、数组的存储特点
一内存连续存储 数组元素在内存中是按顺序连续存储的这使得计算机在访问数组元素时能够快速定位大大提高了数据的访问效率。
二存储分配方式 不同编程语言的数组存储分配方式有所不同。像C、\(C\)、\(C\#\)等语言数组按行进行存储分配而Fortran语言则是按列进行存储分配。
三数组名的特性 数组名代表该数组在内存中的首地址并且它是一个常量在程序运行过程中不能被修改。
三、常用数组的存储细节
一一维数组 对于一维数组\(a[n]\)其各元素按照下角标依次存放。例如在\(C\#\)中我们创建一个整型一维数组int[] a new int[5];假设每个元素占用的存储空间为c字节那么第i个元素的存储地址\(Loc(a[i]) Loc(a[0]) i×c\) 。
二二维数组 以二维数组\(a[m,n]\)为例在\(C\#\)中创建int[,] a new int[2,3];。若每个元素占用c字节其元素存储地址的计算公式为\(Loc(a[i,j]) Loc(a[0,0]) (i×n j)×c\)。这种存储方式与二维数组的矩阵结构相对应便于根据行和列的索引快速计算出元素的存储位置。
三三维数组 三维数组的存储更为复杂以\(a[m,n,l]\)为例如在\(C\#\)中创建int[,,] a new int[2,3,4];。它的存储规律是第一维下标变化最慢第三维最后一维下标变化最快。每个元素的存储地址计算公式为\(Loc(a[i,j,k]) Loc(a[0,0,0]) (i×n×l j×l k)×c\)。这种存储顺序符合人们对三维空间的认知逻辑方便在处理三维数据时进行高效的访问和操作。
四、力扣实战数组相关算法题解析
一最长连续序列力扣 128 题 题目描述给定一个未排序的整数数组nums要求找出数字连续的最长序列不要求序列元素在原数组中连续的长度并设计实现时间复杂度为\(O(n)\)的算法。示例 输入nums [100,4,200,1,3,2]输出4解释最长数字连续序列是[1, 2, 3, 4]长度为4。输入nums [0,3,7,2,5,8,4,6,0,1]输出9。 解题思路与代码实现 收起
python
from typing import Listclass Solution:def longestConsecutive(self, nums: List[int]) - int:if not nums: # 增加对空列表的错误处理return 0nums_set set(nums) # 使用集合来提高查找速度length 0for num in nums_set:if num - 1 in nums_set:continuelst1 self.findBig(num, nums_set, [num])if len(lst1) length:length len(lst1)return lengthdef findBig(self, num, nums_set, lst1):while num 1 in nums_set:lst1.append(num 1)num 1return lst1在这段代码中首先将数组转换为集合利用集合查找元素的时间复杂度为\(O(1)\)的特性提高查找效率。然后遍历集合中的每个元素若当前元素的前一个数不在集合中则以此元素为起点不断寻找连续的数字序列记录下最长序列的长度并返回。
二两数之和力扣 1 题 题目描述给定一个整数数组nums和一个整数目标值target需要在数组中找出和为目标值target的两个整数并返回它们的数组下标。假设每种输入只会对应一个答案且不能使用两次相同的元素可按任意顺序返回答案。示例 输入nums [2,7,11,15], target 9输出[0,1]解释因为nums[0] nums[1] 9所以返回[0, 1]。输入nums [3,2,4], target 6输出[1,2]。 解题思路与代码实现 收起
python
class Solution:def twoSum(self, nums: List[int], target: int) - List[int]:# 创建一个字典来存储数值与索引的对应关系num_to_index {}# 遍历数组一次for i, num in enumerate(nums):# 计算需要的补数complement target - num# 检查补数是否在字典中if complement in num_to_index:return [num_to_index[complement], i]# 将当前数值和索引存入字典num_to_index[num] i# 如果没有找到符合条件的数值对抛出异常raise ValueError(没有找到两个数使它们的和等于目标值)此代码通过创建一个字典在遍历数组的过程中将每个元素的值和索引存入字典。同时每次计算当前元素的补数并检查补数是否在字典中。若存在则找到了满足条件的两个数返回它们的索引若遍历结束仍未找到则抛出异常。 数组在数据存储和算法设计中占据着核心地位。深入理解数组的概念、存储特性以及在算法题中的应用能够为我们在编程之路上打下坚实的基础帮助我们更高效地解决各种复杂的问题。希望通过本文的分享大家能对数组有更全面、更深入的认识在编程实践中灵活运用数组知识提升编程技能。