那是我在这些日子里失败的面试问题.我朋友中没有人知道错误在哪里以及为什么我被告知我失败了.这就是为什么我决定要求你纠正我的解决方案给定N个整数的数组.整数K将数组分成两个子数组.
Left part: A[0], A[1]...A[K];
Right part: A[K+1], A[K+2]... A[N-1];
Run Code Online (Sandbox Code Playgroud)
需要找到每个子阵列中最大可能的最大绝对差值.
MaxDiff = Math.Abs(Max(A[0], A[1]...A[K]) - Max(A[K+1], A[K+2]... A[N-1]))
Example 1: [1, 3, -3]. If K=1, max difference is |3-(-3)| = 6.
Example 2: [4, 3, 2, 5, 1, 1]. If K=3, max difference is |5 - 1| = 4.
Run Code Online (Sandbox Code Playgroud)
时间和空间复杂度应为O(n).我看到我的解决方案的空间复杂性已经不是O(n)了..
int getMaxDifference(int[]A){
int [] leftMax = new int [A.length];
int [] rightMax = new int [A.length];
int max1 = Integer.MIN_VALUE;
int max2 = Integer.MIN_VALUE;
int dif = 0;
int …Run Code Online (Sandbox Code Playgroud) 我在这里看到了很多关于如何使用ArrayList和HashMaps的好解决方案,但重点是我仍然无法解决我的问题.
所以,这个想法是很少有人喝啤酒,葡萄酒和可乐.所以,它看起来像(例如):
Steve wine
Steve cola
Ben cola
Frank wine
Ben cola
Ben cola
Frank wine
Run Code Online (Sandbox Code Playgroud)
最后,我需要计算他们每人喝多少杯饮料.所以,答案应该是这样的:
Steve wine 1
Steve cola 1
Ben cola 3
Frank wine 2
Run Code Online (Sandbox Code Playgroud)
我的想法是创建一个对象Person(String name,String drink).然后我将所有人都放到ArrayList中.之后我创建了HashMap,并希望在键不存在时添加新Person,如果key已存在则增加到1.
Map<Person, Integer> map = new HashMap<Person, Integer>();
for (Person p : persons)
{
if (map.containsKey(p)) {
map.put(p, map.get(p)+1);
} else {
map.put(p,1);
}
}
Run Code Online (Sandbox Code Playgroud)
它不起作用.它只返回我的结果:
Steve wine 1
Steve cola 1
Ben cola 1
Frank wine 1
Ben cola 1
Ben cola 1
Frank wine 1
Run Code Online (Sandbox Code Playgroud)
所以,据我所知,这应该是其他一些技巧.也许你还可以告诉任何其他关于如何计算饮料杯数而不是使用HashMap的想法?非常感谢!