0813 微软第二次笔试
1、处理排污问题,一个数组A代表排污的量,加一台处理污染的机器,排污量减少一半,问最少几台机器能把排污量减少一半,
实现函数public int solution(int[] A)
用例:A[5,8,19,1],返回3,2台机器处理19(19/2/2),1台机器处理8(8/2),19/2/2 + 8/2 + 5 + 1 = 14.75 < 33(A数组得和)
2、统计分数和为1的个数,两个数组X, Y分别代表分子、分母,统计有多少对和为1的分数,
实现函数public int solution(int[] X, int[] Y)
用例:X[1,1,1], Y[2,2,2],代表3个1/2,共有3对
3、病人复健,在接下来的N天(0-N-1)有x节复健课,在第i天复健消费A[i],每节复健课(除最后一节课),下一次都一定在第Y天后,问最小的复健开销是多少。
实现函数:public int solution(int[] A, int X, int Y)
思路:
1、使用最大堆存储污染记录,并记录污染的总和,每次都处理最大的污染数,直到总和小于原总污染的一半
2、写一个函数判断分数的和是否为1然后遍历就行,注意边界值,int肯定溢出了,额,这是否有点简单了,(感觉事情没有这么美好)
3、没想到什么好思路,直接暴力遍历。
#笔经#