一亩三分地

 找回密码 注册账号

扫描二维码登录本站


码农求职神器Triplebyte
不用海投
内推多家公司面试

Total Comp Calculator
输入offer信息
系统自动计算每年收入

科技公司如何
用数据分析驱动产品开发
coupon code 250off 立减$250

深入浅出AB Test
从入门到精通
coupon code 250off 立减$250
游戏初创公司招聘工程师、UIUX Designer和游戏策划
坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
查看: 543|回复: 18
收起左侧

[Leetcode] Leetcode 268. Missing Number,run time complexity

[复制链接] |试试Instant~
我的人缘0

分享帖子到朋友圈
Echooogo 发表于 2019-7-10 04:24:57 | 显示全部楼层 |阅读模式
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (14)
 
 
0% (0)    👎

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
求问各位大神,在刷题的时候,268题,如下:
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array.

Example 1:
Input: [3,0,1]
Output: 2

Example 2:
Input: [9,6,4,2,3,5,7,0,1]
Output: 8

两种解法:
1,search 一次
[Bash shell] 纯文本查看 复制代码
def missingNumber(self, nums: List[int]) -> int:
        
        #This would cause the run time error
        for i in range (len(nums)+1):
            if i not in nums:
                return i
        



2,算正确的数组的和,与实际数组之和的差:
[Bash shell] 游客,本帖隐藏的内容需要积分高于 10 才可浏览,您当前积分为 0。
查看如何攒积分 Click here for more info.
it exceed, 但是第二种不会?
我的理解:
第一种解法,遍历Python list一次,每次search 是O(1), 总共就是O(n),
第二种解法,算正确数组的最大和的时候,遍历一次,O(n), sum(nums): O(n), 两个之和 2*O(n)理论上来说会花更久的时间。




上一篇:Number of Islands的DFS终止条件
下一篇:背包问题全解(背包九讲)
我的人缘0
yongmiles 发表于 2019-7-10 11:15:08 | 显示全部楼层
本楼: 👍   100% (1)
 
 
0% (0)   👎
全局: 👍   100% (20)
 
 
0% (0)    👎
Echooogo 发表于 2019-7-10 08:57
好问题,不知道的说,我觉得能想到解法二的人真的挺聪明的

个人觉得第二种方法并不是最优的.

standard_num = (0+len(nums))*(len(nums)+1)/2
return standard_num - sum(nums)

上面的至少比方法二快,当初我记得我就是这么做的。
这就是我说的小学高斯公式。
回复

使用道具 举报

我的人缘0
LloydBaker 发表于 2019-7-10 08:34:44 | 显示全部楼层
本楼: 👍   100% (1)
 
 
0% (0)   👎
全局: 👍   100% (73)
 
 
0% (0)    👎
这道题我前天刚做。你第一个解法的time complexity is O(n^2) since you have two for loops and each for loop iterate for n times. so is n * n = n^2. The math approach is a great choice in this scenario.
回复

使用道具 举报

我的人缘0
mint0715 发表于 2019-7-10 05:21:52 | 显示全部楼层
本楼: 👍   100% (1)
 
 
0% (0)   👎
全局: 👍   100% (57)
 
 
0% (0)    👎
“第一种解法,遍历Python list一次,每次search 是O(1), 总共就是O(n),”

不,每次遍历是On,总共是On方

评分

参与人数 1大米 +2 收起 理由
312500083 + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

我的人缘0
lilydiaz 发表于 2019-7-10 07:25:04 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   91% (158)
 
 
8% (15)    👎
可以用exclusive or,用每个element和它对应的index做XOR最后再XOR n+1 => O(N)
回复

使用道具 举报

我的人缘0
 楼主| Echooogo 发表于 2019-7-10 08:20:25 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (14)
 
 
0% (0)    👎
mint0715 发表于 2019-7-10 05:21
“第一种解法,遍历Python list一次,每次search 是O(1), 总共就是O(n),”

不,每次遍历是On,总共是On方

谢谢大佬~~!
之后也去找了个相关的网页: https://www.ics.uci.edu/~pattis/ ... omplexitypython.txt
回复

使用道具 举报

我的人缘0
 楼主| Echooogo 发表于 2019-7-10 08:23:41 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (14)
 
 
0% (0)    👎
lilydiaz 发表于 2019-7-10 07:25
可以用exclusive or,用每个element和它对应的index做XOR最后再XOR n+1 => O(N)

谢谢~~!我刚刚去了解了一下XOR,XOR用set,然后set 的containment 是 O(1)
机智机智!!
我把相关链接放在这里,自己之后能查看,也希望能帮到别人:https://stackoverflow.com/questi ... two-lists-in-python
回复

使用道具 举报

无效楼层,该帖已经被删除
我的人缘0
yongmiles 发表于 2019-7-10 08:42:02 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (20)
 
 
0% (0)    👎
小学所学的高斯公式?
回复

使用道具 举报

无效楼层,该帖已经被删除
我的人缘0
 楼主| Echooogo 发表于 2019-7-10 08:57:14 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (14)
 
 
0% (0)    👎
yongmiles 发表于 2019-7-10 08:42
小学所学的高斯公式?

好问题,不知道的说,我觉得能想到解法二的人真的挺聪明的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法 - 不要多加空格: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|小黑屋|一亩三分地

GMT+8, 2019-7-24 08:59

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表