一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 401|回复: 5
收起左侧

[算法题] 函数输入是reference能否修改以及空间复杂度应该怎么算的问题

[复制链接] |试试Instant~ |关注本帖
Wrath 发表于 2015-6-24 05:57:47 | 显示全部楼层 |阅读模式

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

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
用C++刷Leetcode,碰到一些疑惑:
1.如果函数的输入类型是mutable reference,比如threeSum(vector<int>& nums)这种,因为要对nums进行排序,所以是否要重新构造一个vector<int> temp = nums,sort(nums.begin(), nums.end())这样来避免修改nums,还是因为nums没有注明const vector<int>&所以直接sort(nums.begin(), nums.end())就行了?

2.如果一道题目本身要求返回一个size 为n的vector<int>, 但是计算得到这个vector<int>的过程中用到的memeory都是O(1)的,那这种题目的空间复杂度到底是O(1)还是O(n)?因为无论如何肯定会用到O(n)的空间来return结果,这样是不是这道题至少是O(n)空间复杂度了,即使其他地方都只用到O(1)的memory。
谢谢各位指教。

stellari 发表于 2015-6-24 09:33:35 | 显示全部楼层
1. 在Leetcode上刷题的话,直接对nums排序就可以了。在现实中则要根据具体需要而定。面试时可以指出:“这里我改变了原数组,这可能会影响到其他用到nums的程序”。

2. 这点似乎并无严格定义。你在面试时可以指出:“如果我们考虑输出空间的话,则是O(N);如果不考虑的话,则是O(1)”。从理论上来讲,你可以将空间复杂度定义为“辅助空间复杂度”,也就是,如果该算法有可能直接将原数组改变为结果数组,且不需要额外空间做到这一点,则可称其(辅助)空间复杂度为O(1);比如qsort中的partition操作;但如果可以直接改变原数组,但必须使用额外空间暂存一些数据,则不能称其复杂度为O(1)了。
回复 支持 反对

使用道具 举报

2006reload 发表于 2015-6-24 17:14:26 | 显示全部楼层
刷题的时候随便改
面试的时候无论什么都要问清楚
回复 支持 反对

使用道具 举报

 楼主| Wrath 发表于 2015-6-25 02:57:11 | 显示全部楼层
stellari 发表于 2015-6-24 09:33
1. 在Leetcode上刷题的话,直接对nums排序就可以了。在现实中则要根据具体需要而定。面试时可以指出:“这 ...

第2点如果使用的额外空间是constant的话空间复杂度也应该是O(1),看了别人说的好像空间复杂度一般是值extra memory spaces,面试的时候碰到这种问题还是和面试官问清楚定义好了,谢谢。
回复 支持 反对

使用道具 举报

stellari 发表于 2015-6-25 09:44:36 | 显示全部楼层
Wrath 发表于 2015-6-25 02:57
第2点如果使用的额外空间是constant的话空间复杂度也应该是O(1),看了别人说的好像空间复杂度一般是值e ...

是的,只不过一般说“不需额外空间”指的就是“需要0或常数级别的额外空间”。后者说起来太麻烦,所以几乎总是用前者代替了。
回复 支持 反对

使用道具 举报

zhuli19901106 发表于 2015-6-25 23:30:40 | 显示全部楼层
leetcode里面动不动就返回二维vector的行为在实际开发里肯定是不常用的, 因为复制开销大,传指针更常见。
不过要说空间复杂度,应该还算O(1)吧,毕竟返回值不算在“额外空间开销”的范畴里。
个人见解,有不对的还请指正。
另外,碰见vector<int> &num这样的,我一般都尽量在这数组里完成操作,能不多开数组,就尽量节省。如果输入数据不让改,那么应该传入的时候就用const &。
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-11 04:52

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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