BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #38346同步于 2016/8/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

[问题] [leetcode]Reverse Words in a String 关于空间复杂度

MengEr677
2016/8/20镜像同步10 回复
这道题要求O(1)的空间复杂度,可是下面这段代码也通过了,为什么?这段代码用了额外的存储空间啊? /** * @param {string} str * @returns {string} */ var reverseWords = function(str) { var a = []; str.trim().split(" ").forEach(function(val) { if (val) { a.push(val); } }); return a.reverse().join(" "); }; 求大神解答~~~
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
e97ace机器人#1 · 2016/8/20
leetcode不会真去检查你程序的时间和空间复杂度(它也检查不了) . 这个约束更像是对你的提示,但是你没满足复杂度要求还能过测试用例它也检查不出来. ———— 微博 @flowmemo , 现在主要写JavaScript. 关注广泛, 欢迎交流. 此签名通过「北邮人签名档」脚本发送
MengEr677机器人#2 · 2016/8/20
可是如果我用array = str.split(" ");这样的句子,leetcode就会说memory溢出。 【 在 e97ace 的大作中提到: 】 : leetcode不会真去检查你程序的时间和空间复杂度(它也检查不了) . 这个约束更像是对你的提示,但是你没满足复杂度要求还能过测试用例它也检查不出来. : ———— : 微博 @flowmemo , 现在主要写JavaScript. 关注广泛, 欢迎交流. : ...................
e97ace机器人#3 · 2016/8/20
不太清楚你产生超内存的具体是啥样的. 复杂度体现的是程序针对输入数据规模的变化趋势,这个leetcode是判断不了的. 但是对于程序是实际运行时间和内存占用leetcode是可以进行限制的. 我看了下题目,O(1)的空间要求是对于C语言的. 对于js来说这个要求是不现实的. js中的字符串是immutable的,不考虑js引擎的优化, 你要返回的字符串必然是新的字符串,空间为O(N). 然后看你第一个程序里用了split也过了啊 【 在 MengEr677 的大作中提到: 】 : 可是如果我用array = str.split(" ");这样的句子,leetcode就会说memory溢出。 ———— 微博 @flowmemo , 现在主要写JavaScript. 关注广泛, 欢迎交流. 此签名通过「北邮人签名档」脚本发送
MengEr677机器人#4 · 2016/8/21
对啊对啊,正是因为两个都用了split函数,但是一个通过了一个没通过我才觉得好奇怪。 C++是要用istringstream实现的好像,C++我只是知道基础,深入的类都不清楚。。。 喔~好吧~那这么说,其实上面这个代码还是超内存的对吧? 【 在 e97ace 的大作中提到: 】 : 不太清楚你产生超内存的具体是啥样的. : 复杂度体现的是程序针对输入数据规模的变化趋势,这个leetcode是判断不了的. 但是对于程序是实际运行时间和内存占用leetcode是可以进行限制的. : 我看了下题目,O(1)的空间要求是对于C语言的. 对于js来说这个要求是不现实的. js中的字符串是immutable的,不考虑js引擎的优化, 你要返回的字符串必然是新的字符串,空间为O(N). : ...................
e97ace机器人#5 · 2016/8/21
你第一个应该不是O(N),但是能通过就可以了,不用纠结? 第二个没过不清楚了...代码不一样的话不一定是split的问题 【 在 MengEr677 的大作中提到: 】 : 对啊对啊,正是因为两个都用了split函数,但是一个通过了一个没通过我才觉得好奇怪。 : C++是要用istringstream实现的好像,C++我只是知道基础,深入的类都不清楚。。。 : 喔~好吧~那这么说,其实上面这个代码还是超内存的对吧? : ................... ———— 微博 @flowmemo , 现在主要写JavaScript. 关注广泛, 欢迎交流. 此签名通过「北邮人签名档」脚本发送
dss886机器人#6 · 2016/8/21
没写过js,纯猜测 我猜可能是split(" ").forEach没有直接生成分割后的数组,而是一边分割一边遍历,空间复杂度是O(1)
MengEr677机器人#7 · 2016/8/21
一楼的那段代码不是O(N)的空间复杂度? 【 在 e97ace 的大作中提到: 】 : 你第一个应该不是O(N),但是能通过就可以了,不用纠结? : 第二个没过不清楚了...代码不一样的话不一定是split的问题 : ———— : ...................
MengEr677机器人#8 · 2016/8/21
喔~也有可能~我去搜索一下~ 【 在 dss886 的大作中提到: 】 : 没写过js,纯猜测 : 我猜可能是split(" ").forEach没有直接生成分割后的数组,而是一边分割一边遍历,空间复杂度是O(1)
e97ace机器人#9 · 2016/8/21
手误...不是O(1) 【 在 MengEr677 的大作中提到: 】 : 一楼的那段代码不是O(N)的空间复杂度? : ———— 微博 @flowmemo , 现在主要写JavaScript. 关注广泛, 欢迎交流. 此签名通过「北邮人签名档」脚本发送