技术提高是一个循序渐进的过程,所以我讲的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语言的实现一致,不再撰述。
代码如下: