您的位置 首页 > 数码极客

如何在o(n)时间内找出数列中值的算法

技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。

目前我选择C语言,python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。

初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式聊到大数据框架,从大数据聊到人工智能,... ...。

如果有任何问题可以在文章后评论或者私信给我。

我会持续分享下去,敬请您的关注。

LeetCode 268. 缺失数字(Missing Number)

问题描述:

给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 ... n 中没有出现在序列中的那个数。

注:算法应该满足:时间复杂度O(N),空间复杂度O(1)。

示例:

C语言实现:

题目要是要在空间复杂度为O(1)的情况下解题。

这就说明算法中使用的存储空间的大小不能依赖n的大小,最好是不用任何空间。

如果没有找个限制,这道题会有更多种解法。

即使是这样,这道题也非常的简单,我估计大多数人都能做出来,其实就是简单的等差数列求和问题。

我们可以分别求出数列[0,1…n]和数列nums的和,因为这两个数组之间实际上就差一个我们要找的那个缺失的数,所以它们和的差就是问题的解。

对于数列[0,1..n],这是一个的差数列,我们可以直接用数学公式算出它的和:sum= n*(n+1)/2。

所以最终可以写出如下代码:

Java语言的实现:

Java 的实现和C语言的实现一致,不再撰述。

代码如下:

python语言的实现:

python 的实现和C语言的实现一致,不再撰述。

代码如下:

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何在o(n)时间内找出数列中值的算法”边界阅读