拼多多2019春招java后台笔试

1. a[0-n],b[0-n],两个数组,大小为n,元素0<x<100。可以调换a中任意元素的位置,求MIN=a[0]*b[0]+a[1]*b[1]+...+a[n-1]*b[n-1]。

思路:贪心?最大×最小。

2.a-z,A-z的卡片,共52张,随机抽一个字符串,例如xaXb.

消掉相同的字母,要求字典序最小。例如xaXb,消去小x,转换成aXb,输出a。

若消掉大X,则xab,不是最小序。最终结果若是大写,则转换为小写。

思路:输入时,转换大写为小写字母,打表a[0-25],如果有b,a[1]++;//b对应的位置++

for(n)

如果第一个字符访问两次了,判断它后面的字符是否比他小。//待续

3.劫匪两个,数轴上有n个银行,他们商量分别抢劫距离至少为d的两家银行,问他们最多能抢多少钱。

首先输入 n d,再输入n行 银行的信息:位置 金额。

Input:

6 3

1 1

3 5

4 8

6 4

10 3

11 2

Output:

11

思路:by西蒙

将银行按位置排序,m[i]代表当前银行及以前位置的最大银行的钱数(最有钱的银行,的金额)。

从最后一个银行开始看(此银行最有钱),倒序判断此银行距离d以上的银行,第一个符合条件的银行即最大的两个。

循环n次(从最后一个银行开始,一直找,直到有一个值合法)。

确实好方法啊,O(n)的。西蒙聚聚还是厉害。

猜你喜欢

转载自blog.csdn.net/klsdjft/article/details/88381947