一亩三分地

 找回密码 注册账号

扫描二维码登录本站

最近看过此主题的会员


码农求职神器Triplebyte
不用海投
内推多家公司面试

Total Comp Calculator
输入offer信息
系统自动计算每年收入

科技公司如何
用数据分析驱动产品开发
coupon code 250off 立减$250

深入浅出AB Test
从入门到精通
coupon code 250off 立减$250
游戏初创公司招聘工程师、UIUX Designer和游戏策划
坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
查看: 930|回复: 10
收起左侧

Amazon最近的一道面经题,发一个我自己的解法

[复制链接] |试试Instant~
我的人缘0

分享帖子到朋友圈
bitfans 发表于 2019-6-18 11:05:14 | 显示全部楼层 |阅读模式
本楼: 👍   100% (1)
 
 
0% (0)   👎
全局: 👍   93% (27)
 
 
6% (2)    👎

2019(7-9月) 码农类General 硕士 全职@Amazon - 网上海投 - 在线笔试  | WaitList | 在职跳槽

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

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

x
题目(借用了论坛某位的面经):   


two sum closest
     * 给两个int的list,一个capacity,从两个list中各选一个item把num加和,返回所有pair里小于capacity并且最大的id,有多个就返回多个
     * list是这个格式的:[[id1, num1], [id2, num2], [id3, num3]]
     * 返回的格式是:[[id, id], ...]


[Java] 纯文本查看 复制代码
private List<List<Integer>> optimalUtilization(
            int deviceCapacity,
            List<List<Integer>> foregroundAppList,
            List<List<Integer>> backgroundAppList)
    {
        // WRITE YOUR CODE HERE
        TreeMap<Integer, List<Integer>> tree = new TreeMap<>();
        for (List<Integer> pair : backgroundAppList) {
            List<Integer> list = tree.getOrDefault(pair.get(1), new ArrayList<>());
            list.add(pair.get(0));
            tree.put(pair.get(1), list);
        }
        TreeMap<Integer, List<List<Integer>>> result = new TreeMap<>();
        for (List<Integer> pair : foregroundAppList) {
            Integer floorKey = tree.floorKey(deviceCapacity - pair.get(1));
            if (floorKey != null) {
                int diff = Math.abs(deviceCapacity - pair.get(1) - floorKey);
                List<List<Integer>> list = result.getOrDefault(diff, new ArrayList<>());
                for (int id : tree.get(floorKey)) {
                    List<Integer> match = new ArrayList<>();
                    match.add(pair.get(0));
                    match.add(id);
                    list.add(match);
                }
                result.put(diff, list);
            }
        }
        return result.get(result.firstKey());
    }



你们先看,有问题问我,希望能给加点大米


评分

参与人数 4大米 +26 收起 理由
lsxzll + 3 给你点个赞!
octopus1 + 1 很有用的信息!
清道神君 + 20
你的鱼跑了 + 2 给你点个赞!

查看全部评分


上一篇:Facebook Singapore Onsite
下一篇:苏州微软大量hc

本帖被以下淘专辑推荐:

  • · amazon|主题: 134, 订阅: 53
我的人缘0
 楼主| bitfans 发表于 2019-6-18 11:06:42 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   93% (27)
 
 
6% (2)    👎
这个方法用了TreeMap,而且用了两次TreeMap,可能理解起来
游客,本帖隐藏的内容需要积分高于 10 才可浏览,您当前积分为 0。
查看如何攒积分 Click here for more info.
现场想的方法,没写出更好的
回复

使用道具 举报

我的人缘0
 楼主| bitfans 发表于 2019-6-18 11:07:09 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   93% (27)
 
 
6% (2)    👎
这个方法用了TreeMap,而且用了两次TreeMap,可能理解起来并
游客,本帖隐藏的内容需要积分高于 10 才可浏览,您当前积分为 0。
查看如何攒积分 Click here for more info.
现场想的方法,没写出更好的
回复

使用道具 举报

我的人缘0
RichardMXCOF 发表于 2019-6-20 03:19:57 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (34)
 
 
0% (0)    👎
领扣上有这题
public class Solution {
    /**
     * @param A: a integer sorted array
     * @param B: a integer sorted array
     * @param K: a integer
     * @return: return a pair of index
     */
    public int[] optimalUtilization(int[] A, int[] B, int K) {
        if (A.length == 0 || B.length == 0) {
            return new int[0];
        }
        int indexA = 0;
        int indexB = B.length - 1;
        boolean equal = false;
        int[] result = new int[2];
        long max = Long.MIN_VALUE;
        while (indexA < A.len
游客,本帖隐藏的内容需要积分高于 10 才可浏览,您当前积分为 0。
查看如何攒积分 Click here for more info.
                result[1] = indexB;
                indexA++;
            } else {
                indexB--;
            }
        }. check 1point3acres for more.
        return result;
        // write your code here
    }
}
回复

使用道具 举报

我的人缘0
你的鱼跑了 发表于 2019-6-20 13:06:22 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   86% (459)
 
 
13% (71)    👎
噗 我果真已经是牙都掉光的老登了 刷题不行了

和lz的想法一致 但是我只会用hashmap

我得好好研究一哈我以前不
游客,本帖隐藏的内容需要积分高于 10 才可浏览,您当前积分为 0。
查看如何攒积分 Click here for more info.
用hashmap导致 这题做不出来 0.0
回复

使用道具 举报

我的人缘0
Soviet 发表于 2019-6-29 16:55:41 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   95% (459)
 
 
4% (23)    👎
RichardMXCOF 发表于 2019-6-19 14:19
领扣上有这题
public class Solution {
    /**

能说一下题号吗?谢谢!
回复

使用道具 举报

我的人缘0
moluren 发表于 2019-6-29 17:13:00 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   90% (377)
 
 
9% (39)    👎
本帖最后由 moluren 于 2019-6-29 17:22 编辑

感觉两个链表各自排序后,双指针也可以解吧?时
游客,本帖隐藏的内容需要积分高于 10 才可浏览,您当前积分为 0。
查看如何攒积分 Click here for more info.
但是如果链表内的数据是有重复的,就变成O(M*N)了。
回复

使用道具 举报

我的人缘0
moluren 发表于 2019-6-29 17:25:13 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   90% (377)
 
 
9% (39)    👎
RichardMXCOF 发表于 2019-6-20 03:19
领扣上有这题
public class Solution {
    /**

这个值是类似的题目吧,你这个是假设链表已经排序。
另外楼主的题目是要返回多个id对的。
回复

使用道具 举报

我的人缘0
tycworld 发表于 2019-6-30 01:14:40 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (4)
 
 
0% (0)    👎
Soviet 发表于 2019-6-29 16:55
能说一下题号吗?谢谢!

1797. optimalUtilization. 但是就像楼上说的, 题目有些许不同
回复

使用道具 举报

我的人缘0
long9930 发表于 2019-6-30 01:43:54 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (31)
 
 
0% (0)    👎
moluren 发表于 2019-6-29 17:13
感觉两个链表各自排序后,双指针也可以解吧?时间复杂度是O(MLogM + NLogN),M和N分别是两个链表的长度。在 ...

同意排序后双指针处理。如果一个list长度明显小于另一个list,就仅对它排序过后二分查找。
回复

使用道具 举报

游客
请先登录
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

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

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

手机版|小黑屋|一亩三分地

GMT+8, 2019-7-18 02:34

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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