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