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

[其他] 一道OA模拟题,看了两个小时都没什么思路,求大神看看

🔗
匿名用户-I20TA  2022-10-4 08:32:01 |倒序浏览

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

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

x
今天做OA前本来想随便做个模拟测试,结果心态炸了


题目难点在于有一个m*n的二维数组,每一行取出至少n/2个数。 总共取出大于m*n/2个数,求他们最大和最小值的差值, 要使得差值最小。
个人想法是对每一行先排个序,然后对每行取n/2个连续数求最大/最小值。但这样时间复杂度就是n^m了,明显行不通。


有能解惑的加米

上一篇:Leetcode的新UI是不是有点问题,尤其是公司tag
下一篇:一个VO题,蠡口就霸气简化版。。。。
全局:
ND0406 发表于 2022-10-03 21:09:37
难点就是在left都一样大的情况下 到底滑动哪个窗口呢?
两次滑动窗口中,有多个相同的left都是任意移动一个即可

第一次找k的窗口,如果有2个left相同且最小的行,无论你移动哪一个,最小的left都不会变(因为你移动了一行,另一行还是之前的最小left),所以cost就不可能减小(最小left不变,最大right可能增大),只有2行都移动完之后cost才可能减小,先移动哪个后移动哪个都无所谓

后面找最大数量的滑动窗口同理,2个相等的最小left,移动其中一个,另一个最小left不会变,所以最小left+k也不会变,right就无法扩展,可选数量就不可能增大,只有相等的最小left都移动了才有可能有进展
回复

使用道具 举报

全局:
每行排序,然后每行搞一个大小为n/2的滑动窗口(每行存一个left和一个right)然后最大的right-最小的left即为当前cost,然后找出left最小的那一行,向右滑动一格,再求一遍cost,所有行都滑到头以后就可以知道最小的cost即k,过程中需要注意left一样大以及某些行已经滑到头了这种corner case。得到k之后,每一行再次新建滑动窗口,找出最小的left,然后把每一行的right扩展到最小left+k的位置,得到当前的最大数量,然后继续右移一格最小的left,扩展所有right,记录数量,所有行都滑到头就能得到最大数量

评分

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

查看全部评分

回复

使用道具 举报

全局:
感觉算出最小差,然后再算能这个组成最小差的组合放的数? 既小于这个组合里较大的和大于这个组合里较小的?

补充内容 (2022-10-04 10:11 +08:00):
既然每个都要选m/2个,找到所有行里排序后,m/2位置最大的,和m/2+1位置最小的? 就是那一对?

评分

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

查看全部评分

回复

使用道具 举报

🔗
14417335 2022-10-4 11:38:27 | 只看该作者
全局:
楼主好题。但是无法加米。

“抱歉,您不能对匿名帖评分“
回复

使用道具 举报

🔗
ND0406 2022-10-4 12:09:37 来自APP | 只看该作者
全局:
yurikaka 发表于 2022-10-03 19:09:18
每行排序,然后每行搞一个大小为n/2的滑动窗口(每行存一个left和一个right)然后最大的right-最小的left即为当前cost,然后找出left最小的那一行,向右滑动一格,再求一遍cost,
难点就是在left都一样大的情况下 到底滑动哪个窗口呢?
回复

使用道具 举报

全局:
yurikaka 发表于 2022-10-03 19:09:18
每行排序,然后每行搞一个大小为n/2的滑动窗口(每行存一个left和一个right)然后最大的right-最小的left即为当前cost,然后找出left最小的那一行,向右滑动一格,再求一遍cost,
学到了. 根据left来移动window真是巧妙
回复

使用道具 举报

全局:
14417335 发表于 2022-10-03 20:38:27
楼主好题。但是无法加米。

“抱歉,您不能对匿名帖评分“
哈哈。我是来求解答的,不是来骗米的。
回复

使用道具 举报

全局:
这题是不是可以贪心啊

感觉可以证明说 一定至少有一行或者两行一定只取m/2个元素, 然后这一行或者两行 贡献出最大最小值

确定了最大最小值这个题目就很简单了
回复

使用道具 举报

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

本版积分规则

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