微众银行笔试

第一题


题目描述:

小美想要买糖果店的一根长长的糖果,糖果店顾客可以从中选取一个位置然后老板会在那切断,糖果前端到那个切断位置的糖果就会出售给这位顾客。这个糖果其实不同段有着不同的口味,小美希望她选出来的糖果中各个段有着不同的口味,在这基础上希望能选出尽可能长的糖果。小美想知道她能买到最长多长的糖果,请你帮帮她。

输入描述

第一行1个整数n,表示糖果的长度。

第二行n个整数a1a2...an,其中ai表示从糖果前端开始第i段的口味,每段均1为单位长度。

对于100%的数据,1<=n<=50000,1<=ai<=50000

输出描述

输出一行一个整数表示能买到的糖果的最长长度,且其中不包含相同口味.


样例输入

5
1 2 3 3 4

样例输出

3


提示

如果我们买长度为4的糖果,包含的口味为[1,2,3,3],存在了重复。

而长度为3时,包含的口味为[1,2,3],不存在重复。因此长度3为最长的不存在重复口味糖果长度。


思路:哈希解法去重即可,理解清楚题目,不要被绕进去就行,可能会理解错成滑动窗口题目


public static void main(String[] args) {
//1.不同段有不同的口味
//2.选尽可能长的糖果
//3.最多能买多长的糖果(价格最优,口味不能重复)
Scanner sc = new Scanner(System.in);
int arrayLength = sc.nextInt();
int i = 0;
int [] array = new int[arrayLength];
while (i<arrayLength){
array[i] = sc.nextInt();
i++;
}
int maxLength=0;
Map<Integer,Boolean> map = new HashMap<>();
for (int j = 0; j < array.length; j++) {
if (!map.containsKey(array[j])) {
map.put(array[j],true);
maxLength++;
}else {
break;
}
}
System.out.println(maxLength);
}



第二题


题目描述:

酷酷的小明准备和小伙伴们展示他捏出来的超酷的橡皮泥士兵。在展示之前,小明发现有些橡皮泥士兵大小十分相似甚至相同,这让小明感觉不是很酷,因为小明想要他的橡皮泥作品都有自己的风格,即使是大小也要有区别。小明的n个橡皮泥士兵的大小分别为a1,a2...an,小明可以通过给某个士兵加一单位皮泥来使得其大小增加一单位。小明想知道如果他想要让所有的橡皮泥士兵大小都不相同,至少需要一共加多少单位橡皮泥。

输入描述

第一行1个整数n,表示小明的橡皮泥士兵数量.

第二行n个整数a1a2...an,分别表示小明的橡皮泥士兵的大小。

对于100%的数据,1<=n<=50000,1<=ai<=100000

输出描述

输出一行一个整数表示总共至少加多少单位的橡皮泥.

样例输入

5
1 1 2 3 3

样例输出

5

提示

我们给一个大小为1的橡皮泥士兵增加4单位像皮泥,大小变为5;

再给一个大小为3的橡皮泥士兵增加1单位像皮泥,大小变为4。

此时橡皮泥士兵们的大小分别为1、2、3、4、5,没有两个橡皮泥士兵拥有相同大小了。

可以证明没有更优方案。


思路:同样是哈希思想,把重复的橡皮泥士兵单独拿出来累加橡皮泥单位,然后统计次数即可


public static void main(String[] args) {
//1.通过给所有橡皮泥士兵加单位橡皮泥从而实现不同橡皮泥不同的风格
//2.至少需要加多少单位橡皮泥才能实现这个目标
Scanner sc = new Scanner(System.in);
int arrayLength = sc.nextInt();
int i = 0;
int [] array = new int[arrayLength];
while (i<arrayLength){
array[i] = sc.nextInt();
i++;
}

//通过Map获取重复大小的橡皮泥,重复大小的橡皮泥就是要变化大小的橡皮泥
int mixNum=0;
List<Integer> list = new ArrayList<>();
Map<Integer,Boolean> map = new HashMap<>();
for (int j = 0; j < array.length; j++) {
if (map.containsKey(array[j])){
list.add(array[j]);
}else {
map.put(array[j],true);
}
}

for (int k = 0; k < list.size(); k++) {
Integer item = list.get(k);
while (map.containsKey(item)){
item = item+1;
mixNum++;
}
//已经累加到不重复的橡皮泥要加入到map集合中
map.put(item,true);
}

System.out.println(mixNum);

}


第三题


题目描述:

小明有一个数组。他挑选了一个有理数u/v,现在他想知道这个数组有多少个子区间的平均值恰好等于u/v。数组的子区间即是数组中连续的一段区间,如数组[4,2,6]有6个子区间[4],[2],[6],[4,2],[2,6],[4,2,6]。

输入描述

第一行有三个整数n,u,v(1<=n,v<=100000,1<=u<=n*v),代表数组的长度,小明选择的有理数的分子和分母。输入保证u和v的最大公因数是1,即u/v是最简分数。

第二行有n个绝对值不超过1000000的整数,代表数组中的元素。

数字间两两有空格阳开。

输出描述

输出一个非负整数,代表所求的答案

样例输入

6 5 2
2 4 1 3 2 3

样例输出

6


思路:暴力获取所有连续子区间,然后子区间内部累加判断,但不知道为什么AC率只有18%,有木有懂哥指点一下


我的代码

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int arrayLength = sc.nextInt();
double u = sc.nextDouble();
double v = sc.nextDouble();
double result = u/v;
int i = 0;
int [] array = new int[arrayLength];
while (i<arrayLength){
array[i] = sc.nextInt();
i++;
}

double numLength=1;
double sum=0;
int record=0;
//暴力获取所有连续子区间,子区间的长度为1开始,逐渐累加到数组的长度
for (int j = 0; j < array.length && numLength<=array.length; j++) {
int num = 0;
for (int k =0; k < array.length; k++) {
sum = sum+array[k];
num++;
//拼凑出一个子区间则计算其平均值
if (num == numLength){
if (sum/numLength == result){
record++;
}
num=0;
sum = 0;
if (numLength>=2){
k--;
}
}

}
sum=0;
j=0;
numLength++;
}

System.out.println(record);
}


0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
哒
作者分享
长沙某厂笔试(6小时)
14
美团笔试
23
自秋招开启以来,但凡是大一点的公司,算法题都要求是ACM模式,leetcode刷题的时候一定要学会舍弃核心代码模式呀,要不然笔试的时候,测试用例都想不出来[流泪]
20
寄,nio蔚来笔试选择题基本全是c 的指针相关的题目,我明明投的是Java岗位呀,呜呜 算法题 1.求最长的子序列,子序列节点之间可以跳跃,既没有连续性要求(疑似滑动窗口算法,但改动了连续性的条件) A.两个节点之间要求是递增的 B.两个节点之间要求能够整除 2.n组字符串经过n次操作,字符串两两比较,返回true or false 3.小红走路地图题,疑似动态规划 或者贪心算法(一点思路都没用) 算法题A出一道半 寄中寄[流泪]
16
2023/8/24 实习Day04 因为我旁边的实习生想要辞职全力备战秋招,然后他的leader过来劝说他,跟我们分享了跟多,他的leader作为管理层,跟我们分享了很多管理层的思维,比如 1.不要在意局部最优解,要有长远的目光 2.不要在意毕业薪资多少,要更看重平台,更看重成长,同样是工作几年,工作后的差距才是巨大的 3.要敢于冒险,敢于拼搏,不要过于求稳,过于求稳永远都得不到较大的价值(说年轻人的试错成本是最低的,大不了从头再来) 4.做事情要沉得住气,不要太在意得失,还举了一个他认识的老板案例,在入行之前,调研了行业整整三年,摸透了所有赛道后才找到了一条比较好的赛道,最终创业成功 还有很多很多思维,自己暂时还领略不到,我自己还是更局限在一个普通人的视角,想着端稳饭碗的视角,leader也理解我们的难处,后面彼此交谈了很久,谈话时长从今晚的8点聊到了10点半,开始只有三个人的,后面越来越多人围过来听,甚至正式岗位的也围过来听leader分享 感觉这家公司氛围真的很好,管理层也真诚,没什么架子,真正把他心里面的东西分享出来,想给我们实习生一些帮助 虽然今晚得到明确答案,公司基本没有转正hc,因为目前公司业务没有扩展,公司目前在岗人数也足够业务了,而且她还透露今年互联网行业仍在走下坡路,大家都还在紧衣缩食,但应届生的数量是不断的在增多,所以今年求职难基本是避免不了的 虽然公司没有转正hc,但我还是庆幸我来到一家这么好的公司,特别是这里的人都很真诚,相处的都很舒服,彼此都互相帮助,真的非常非常的nice
46
下载 APP