Amazon社招OA还是之前的老2题

2个月前做了Amazon OA,今天看了下还是一样的。贴个图,给大家参考下!因为之前写了面经,但是没有贴原题,大家可能会有一些小疑问。如果有疑问可以私信我。有空会回答的 :man_technologist:
之前整理的amazon的比较全面的面经在这里

  1. 第一题是Amazon Fresh送货的



  2. 第二题是无人机送货


2 Likes

楼主可以问下第二题怎么做吗?今天用也做了这两题但是第二题没调试完

先Collections.sort 2个input list。然后int sum = Integer.MIN_VALUE;
2个for循环这2个ArrayList, 循环里定义2个变量,forwardRoute和returnRoute,通过他们的index get到。
后面的核心逻辑我贴下:

int tmp = forwardRoute.get(1) + returnRoute.get(1);
if (tmp > maximumOperationTravelDistance) {
  continue;
}

if (tmp >= sum) {
	List<Integer> l = new ArrayList<>();
	l.add(forwardRoute.get(0));
	l.add(returnRoute.get(0));
	if (tmp > sum) {
		result = new ArrayList<>();
	}
	result.add(l);
	sum = tmp;
}

有人说这个题可以sort后用binarysearch, 比如说sort长的list,然后用短的list在长的list里面搜索,可我想不出来,如果在binarysearch过程中很多相等的要怎么处理呢?例如 在list[1,1,2,2,3,3,3,6,6,6]中搜索小于等于5的最近的数要怎么处理(返回所有index)?

我不是很懂你的意思,如果你要搜索<=5的最近数,那就是找到最左边的3的index,用左右夹板夹出范围。

用binary search的正常写法,在left right mid这3个点之间的情况做一些小改动就可以实现了。

那如果用左右夹板找出所有的3,时间复杂度会不会是O(n)?我比较笨哈哈,求指点

举个栗子吧,
 
list[1,1,2,2,3,3,3,6,6,6]
     L       M    5    R

第一步: 用Binary Search移动左右指针,逼近target number 5,直到有2个或者更少的数在L和R之间。

list[1,1,2,2,3,3,3,6,6,6]
             L   M  5  R

list[1,1,2,2,3,3,3,6,6,6]
                 L M5  R

第二步:post-processing,谁的差值的更小就移动谁。如果我们要找出小于等于5差值最小的
数,那就是3和5,那么就向左移动L,直到L-1的值小于L停止。

list[1,1,2,2,3,3,3,6,6,6]
             L   

Time Complexity就很容易看出来了,是先binary search,直后操作L,如果中间操作了k个
数,就是O(logn + k)
1 Like

请问amazon OA 是不是只能用java

不是,语言不限的。

第一题就是很简单的x2 + y2 比较大小吗 还是我想错了

第一题第二个testcase为什么没输出正确的顺序呢?不应该是[[2, 4], [5, 3], [3, 6]]么?
还是numDestination和delivery一致的时候不用排序?

谢谢 楼主!

1 Like

请问楼主是校招的吗?

社招奥

我作的也是这两题

楼主你好,我想问一下有没有可能出现forwardroutelist 或者returnroutelist为空。只在其中一个取值的情况呢。还是说必须是去和返的值相加最优解呢。

这题的要求应该是不能为空的,我记得