news 2026/5/30 17:31:29

1.1 一维数组(markdown版)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
1.1 一维数组(markdown版)

一维数组简介

数组是最简单的,也最基础的数据结构。数组是一个有序的数据集合,用索引(或者叫下标)访问数据。在大多数编程语言,比如C/C++/java/javascript中,数组的索引都是以0开始。它的逻辑结构是一段连续的空间(因为虚拟内存的原因,实际情况下大数组可能由多个不连续的内存页组成)。
如下图所示:

索引012345
数据112358

上图中,第一行表示数据第二行表示索引


应用案例

需求

一维数组,我会以一个案例来开始。

假设有这么一个需求,求11个点能构成多少种二叉树。比如3个点,可以构成五种二叉树:
​​​​

按照序言里的步骤,我们第一步是仔细研究需求。从上图看,所有的树都是线性结构。那么不同在哪里?可见这个问题其实是数学里的组合计数问题。

解题思路

以3个点为例子,作为二叉树必须要有根节点。那么利用分类归纳法,可以这样计算出来。

  • 场景1 只有左节点

  • 场景2 左右节点都存在

  • 场景3 只有右节点

以上场景实际上是什么问题?是结点的左右分配问题!那么假设N个结点能组成二叉树的数目为C(n)

  • 场景1
    左节点数量2,右节点数量0,树的数量为左边树的数量C(2)*右边树的数量 C(0)
  • 场景2
    左节点数量1,右节点数量1,树的数量为左边树的数量C(1)*右边树的数量 C(1)
  • 场景3
    左节点数量0,右节点数量2,树的数量为左边树的数量C(0)*右边树的数量 C(2)
    所以对于N个结点,就可以分成N种场景。左边的数目确定了,右边的数目就也确定了。所以可以写出递归公式,是乘积的求和:
    C ( n ) = ∑ i = 0 n − 1 C ( i ) C ( n − i − 1 ) C(n) = \sum_{i = 0}^{n - 1}C(i)C(n - i - 1)C(n)=i=0n1C(i)C(ni1)
    那么这个问题,用什么数据结构呢?根据递归公式,可以清楚地知道我们需要存储C(0)到C(n-1)的所有数据,所以这个问题,一维数组这种数据结构最合适了。经过分析之后,代码就非常容易写了。

代码实现

Python代码

defc(n):ifn<2:return1array=[0]*(n+1)array[1]=array[0]=1foriinrange(2,n+1):forjinrange(0,i):array[i]+=array[j]*array[i-j-1]returnarray[n]

需要注意的是python中没有严格意义上的数组。为了严谨,这里附上java代码。

Java代码

publicstaticintcatalan(intn){if(n<2){return1;}int[]array=newint[n+1];array[1]=array[0]=1;for(inti=2;i<n+1;i++){for(intj=0;j<i;j++){array[i]+=array[j]*array[i-j-1];}}returnarray[n];}

这个数列就是著名的明安图数列,也叫卡特兰数列。不过在我们这个例子中,与卡特兰数列错了一位而已。
我们的例子中c(0)=1 c(1)=1 c(2)=2……
而卡特兰数列是c(1)=1 c(2)=1 c(3)=2……
递归公式,与卡特兰数列一模一样。
这个题目属于数学专业研究生的组合计数学课程。其实我是反对把知识分什么中学知识、大学知识、硕士阶段、博士阶段的。我们要做的仅仅是,按照编程的套路,先仔细分析需求,选择合适的数据结构,然后设计算法,编写代码,就可以了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 18:41:58

【图像处理基石】什么是神经渲染?

前言 在计算机图形学和计算机视觉的交叉领域&#xff0c;神经渲染&#xff08;Neural Rendering&#xff09;正成为最热门的研究方向之一。它打破了传统渲染依赖手工设计规则的局限&#xff0c;用神经网络学习从数据到图像的映射&#xff0c;让“AI画画”“数字人重建”“场景生…

作者头像 李华
网站建设 2026/5/29 7:36:21

性能测试中关于硬件环境的测试

比如营销活动的服务器的部署规格&#xff1a; 部署规格 CPU&#xff1a;0.001~4 (Core) 内存&#xff1a;16384~16384(Mb) 6个POD测试要点&#xff1a;单个pod的性能指标摸底&#xff0c;6Pod 集群峰值容量测试&#xff0c;6Pod 集群 72 小时稳定性测试&#xff0c;6Pod 集群容…

作者头像 李华
网站建设 2026/5/29 6:45:27

微信小程序uniapp-vue新闻网站

文章目录具体实现截图主要技术与实现手段系统设计与实现的思路系统设计方法java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;带文档1万…

作者头像 李华
网站建设 2026/5/9 9:55:34

微信小程序uniapp-vue校园美食评论餐饮配送商家 配送员

文章目录具体实现截图主要技术与实现手段系统设计与实现的思路系统设计方法java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;带文档1万…

作者头像 李华
网站建设 2026/5/29 3:55:07

微信小程序uniapp-vue校园自动点餐系统带跑腿

文章目录具体实现截图主要技术与实现手段系统设计与实现的思路系统设计方法java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;带文档1万…

作者头像 李华