查看: 2880| 回复: 13
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 感觉上次面试被面试官带沟里去了

全局:

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

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

x
题目:一个未排序的数组,打印出所有可能的两个数组合,这两个数的和是指定的K。要求打印出所有元素的index.
要求空间是O(1),并且解法能处理duplicate element

如果不考虑空间,可以借助Map<Integer, List<Integer>>数据结构做出来。但是如果要考虑时间和空间,想了很久也没有想出好的解法。当时面试官给的提示是用两边指针的方法。

现在想来面试官很可能自己也弄错了,如果用两边指针,那肯定是先把数组排序,然后两边移动指针打印所有可能的value组合,而不是index组合。因为一旦排序了,之前的index就变了,除非用O(n)的空间对integer封装保存原来的index.

各位怎么看?这个题目看上去很普通,但是加了几个小变化后就变得很难了
- 数组有重复元素
- 打印所有可能而不是第一个可能
- 打印index而不是value
- 空间要求是O(1), 时间小于O(N*N)

上一篇:Leetcode第15题如果要求不能先把array排序
下一篇:备受地里好评的Educative.io,开始holiday discount啦!
全局:
我的感觉,空间O(1)应该指extra O(1),也就是input/output本身的size并不算, 不然绝对不可能O(1)啊....
这样的话通过In-place sort和two pointer能实现O(1)的Memory
如果时间小于但不等于O(N^2)的话,two pointer的右指针可以用binary search,这样就是O(nlogn)了
一点拙见,不一定对

评分

参与人数 1大米 +1 收起 理由
youzi010 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

推荐
hjy 2020-7-21 07:32:52 | 只看该作者
全局:
CL_has_a_moon 发表于 2020-7-20 05:11
我的感觉,空间O(1)应该指extra O(1),也就是input/output本身的size并不算, 不然绝对不可能O(1)啊....
...

sort完之后怎么保留index呢?题目要求要保留原index。。不用额外空间的话几乎是做不到的吧。。
回复

使用道具 举报

推荐
hjy 2020-7-21 07:34:08 | 只看该作者
全局:
lynellea 发表于 2020-7-17 03:37
直接暴力枚举?毕竟强调有空间限制,那时间复杂度该牺牲一点就牺牲一点呗,世间安有两全法。

暴力枚举也有个问题,这样去重的话怎么做到O(1)呢?如果去重没法O(1),那复杂度是压缩不到O(n^2)的
回复

使用道具 举报

全局:
看上去不大可能啊。。。N 的大小有限制吗?如果小于USHRT_MAX,还有可能。。。

评分

参与人数 1大米 +1 收起 理由
youzi010 + 1 赞成

查看全部评分

回复

使用道具 举报

🔗
lynellea 2020-7-17 03:37:38 | 只看该作者
全局:
直接暴力枚举?毕竟强调有空间限制,那时间复杂度该牺牲一点就牺牲一点呗,世间安有两全法。

评分

参与人数 1大米 +1 收起 理由
youzi010 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

全局:
lynellea 发表于 2020-07-16 12:37:38
直接暴力枚举?毕竟强调有空间限制,那时间复杂度该牺牲一点就牺牲一点呗,世间安有两全法。
楼主又说时间小于O(N^2),肯定要sort了,但存哪

评分

参与人数 1大米 +1 收起 理由
youzi010 + 1 赞成 没地方存

查看全部评分

回复

使用道具 举报

🔗
Dustinlo 2020-7-18 08:20:44 | 只看该作者
全局:
感覺他是挖坑給你跳,但是要看你怎麼跳出來...

评分

参与人数 1大米 +1 收起 理由
youzi010 + 1 还有这种面试方式啊?太不友好了

查看全部评分

回复

使用道具 举报

🔗
 楼主| youzi010 2020-7-19 05:04:55 | 只看该作者
全局:
Dustinlo 发表于 2020-7-18 08:20
感覺他是挖坑給你跳,但是要看你怎麼跳出來...
还有这种面试方式啊?太不友好了
回复

使用道具 举报

全局:
distantstar 发表于 2020-07-17 09:14:34
楼主又说时间小于O(N^2),肯定要sort了,但存哪
要不然 把(index, val) 用 index+val*N 代替 然后再sort?这个本质上和sort (val, index)pair 是一样的

可能的麻烦是如果N巨大就overflow了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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