谈谈使用过的几款咖啡机

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
H1B/绿卡遥遥无期
又不想回国
来东南亚最大的互联网集团工作?
码农求职神器Triplebyte:
不用海投
内推多家公司面试
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
查看: 857|回复: 6
收起左侧

[数组] two sorted lists fetch k largest sum

[复制链接] |试试Instant~ |关注本帖
我的人缘0
章鱼小丸子 发表于 2014-9-24 12:55:13 | 显示全部楼层 |阅读模式
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】

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

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

x
题目:

Given 2 sorted lists of numbers M and N, find the k highest values of M(i) + N(j) in O(k)

举个例子来说,如果两个list 分别是
[20 15 13 7 2]
[8 7 3 1]
求最大的 9 个sum就是

28= 20+8
27 = 20+7
23 = 20+3
23 = 15+ 8
22 = 15 +7
21 = 20+1
21 = 13 +8
20 = 13 +7
18 = 15 + 3

跪求指导~~谢谢~

上一篇:你们gist的函数和变量颜色怎么调的啊?
下一篇:很简单的链表找环
我的人缘0
ztxiong2151049 发表于 2014-9-30 12:02:46 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
本帖最后由 ztxiong2151049 于 2014-9-30 12:19 编辑
  1. void kLargest(int[] a, int[] b) {
  2.      int m = 0; n = 0;
  3.     for (int i = 0; i < k; i++) {
  4.          System.out.println(a[m] + a[n]);
  5.          if (m + 1< a.length && n + 1 < b.length && a[m + 1] + a[n] <= a[m] + a[n + 1]) n++;
  6.          else if (m + 1 < a.length && n + 1 < b.length && a[m + 1] + a[n] > a[m] + a[n + 1]) m++;
复制代码
就是先打印,再比下一步该走哪步
回复 支持 反对

使用道具 举报

全球28万学生4.7分推荐
我的人缘0
ztxiong2151049 发表于 2014-9-30 12:20:24 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
void kLargest(int[] a, int[] b) {
     int m = 0; n = 0;
    for (int i = 0; i < k; i++) {
         System.out.println(a[m] + a[n]);
         if (m + 1< a.length && n + 1 < b.length && a[m + 1] + a[n] <= a[m] + a[n + 1]) n++;
         else if (m + 1 < a.length && n + 1 < b.length && a[m + 1] + a[n] > a[m] + a[n + 1]) m++;
         else if (m + 1 < a.length) m++;
         else if (n + 1 < b.length) n++;
    }
}
回复 支持 反对

使用道具 举报

我的人缘0
austurela 发表于 2014-9-30 12:21:01 | 显示全部楼层
  此人我要顶:
 
53% (7) 【我投】
  此人我要踩:
 
47% (6) 【我投】
binary search        
回复 支持 反对

使用道具 举报

我的人缘0
rsun 发表于 2014-9-30 12:40:31 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
本帖最后由 rsun 于 2014-9-30 12:42 编辑
ztxiong2151049 发表于 2014-9-30 12:20
void kLargest(int[] a, int[] b) {
     int m = 0; n = 0;
    for (int i = 0; i < k; i++) {

你这个,,代码风格什么的就不说了。。
System.out.println(a[m] + a[n]);
两个a?kLargest里面的k哪里来的?


这些都无关紧要。。最重要的是

你这么跳过去了[size=13.63636302948px]23 = 15+ 8
22 = 15 +7
21 = 20+1

15+8的8
20+1的20
可就直接跳过去了啊。。。

回复 支持 反对

使用道具 举报

我的人缘0
ztxiong2151049 发表于 2014-9-30 15:32:54 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
哦,版主说得对,我写错了,我再想想吧,不好意思~
回复 支持 反对

使用道具 举报

我的人缘0
ztxiong2151049 发表于 2014-9-30 15:40:56 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
我怕我再写错,但是这个思路应该没问题:用max heap把a[m] + b[n] 压入堆中,用一个HashSet<Integer> used记录当前的搭配已经压入,如m * a.length + n。
然后当heap.size() == k时,返回heap里面的值。
回复 支持 反对

使用道具 举报

游客
请先登录

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html






手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-6-25 12:19

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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