Missing Number
2016-09-23 08:58
239 查看
leetcode第268题,找出连续数字序列中的缺失项。
一开始看错题意了,以为是有序数组,写了半天才发现不是,于是就排了个序,虽然AC了,但是很明显时间复杂度已经超过了线性时间,因为有排序操作。
这里还要考虑首尾两端缺失的情况,所以比较繁琐。
def missingNumber(nums):
n = len(nums)
nums.sort()
if nums[n-1] != n:
return n
if nums[0] != 0:
return 0
for i in range(1,n):
if nums[i-1]+1 != nums[i]:
return nums[i-1]+1
如果在线性时间内完成且不能开辟其它空间,遍历数组已不可能,所以可以想办法找出题目的要求,题目要求是连续空间,因此可以先算出原始的加和,减去当前给定的数组序列加和,就可以完成任务了,而且不用考虑首尾的问题,对原数组的加和是线性时间,原始加和可以通过等差数列通项公式得出。
class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
sum1 = sum(nums)
n = len(nums)
sum2 = (n*(n+1))/2
return sum2-sum1
一开始看错题意了,以为是有序数组,写了半天才发现不是,于是就排了个序,虽然AC了,但是很明显时间复杂度已经超过了线性时间,因为有排序操作。
这里还要考虑首尾两端缺失的情况,所以比较繁琐。
def missingNumber(nums):
n = len(nums)
nums.sort()
if nums[n-1] != n:
return n
if nums[0] != 0:
return 0
for i in range(1,n):
if nums[i-1]+1 != nums[i]:
return nums[i-1]+1
如果在线性时间内完成且不能开辟其它空间,遍历数组已不可能,所以可以想办法找出题目的要求,题目要求是连续空间,因此可以先算出原始的加和,减去当前给定的数组序列加和,就可以完成任务了,而且不用考虑首尾的问题,对原数组的加和是线性时间,原始加和可以通过等差数列通项公式得出。
class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
sum1 = sum(nums)
n = len(nums)
sum2 = (n*(n+1))/2
return sum2-sum1
相关文章推荐
- 数据库的三大范式
- 五最好的应聘者可以问问题
- 常见的Java 问题排查方法
- 第二次作业及总结——数据类型和运算符
- Python Web 开发学习 - 学习笔记(1)- Python特性
- 第五周-C语言 简单数列的求和
- shell 的几个数据处理命令 管道命令
- eclipse字体颜色的设置方法
- Android Easeui 3.0 即时通讯的问题汇总
- redis启动脚本
- Ubuntu环境下busybox编译报错处理
- 企业生产环境用户sudo权限集中管理项目方案案例
- continue和break的用法区别
- JavaScript 实现碰壁反弹
- my-innodb-heavy-4G.cnf 配置文件参数介绍
- Redis的安装和使用
- zabbix自动注册
- PHP服务Fcgi进程及PHP解析优化
- ScrollView中嵌套ListView与GridView时滑动冲突解决方案
- HTTPS是如何工作的