题目1:天弃之子
标题:天弃之子
时间限制: 3秒 内存限制: 262144k 语言限制:不限
有一款游戏,过关的方式是按按钮。游戏一共有几关,每一关有a[i]
个按钮,其中只有唯一一个按钮是可以通关的,按下其他的按钮游戏就会失败。
好在这个游戏可以重来,而且由于设计者的疏忽,每一关的通关按钮是不变的,所以你可以记住前几关的按钮,重来时就可以直接通关。
但是你的运气似乎用在了其他地方,你使用了最多的按按钮次数才成功通关。求这个最多的按按钮次数吧!
解题思路
题目提炼: 游戏共有n关,每一关有a[i]个按钮,其中只有一个可以过关,选择错误就会重新开开始,玩家可以通过试错记住正确的按钮。
问玩家运气最差时(每一.关都要试a[i]次才过关)共需要按多少次按钮才能通关。
这道题最重要的环节就是读懂题目,从题意中分析出:每一关都要试a[i]次。 之后就比较容易了。
对于每一关来说,都要进行a[i]-1
次失败
每次失败要先通过前面的i-1
关,再算上当前这关,需要按i
次按钮
所以往答案里累加(a[i]-1)*i
最后再算上最终成功的那一次,通过n关需要按n次按钮即可
代码(两种写法)
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param buttons int整型一维数组
* @return long长整型
* 没有转long就会报错,所以一定要转。
*/
public long findMaxButtons (int[] buttons) {
// write code here
long count = 0;
for(int i =0;i<buttons.length;i++){
if(buttons[i]==1) {
count += 1;
continue;
}
else{
long tmp = (i+1)*(buttons[i]-1)+1;
count+=tmp;
}
}
return count;
}
}
public long findMinButtons2(int[] a){
long res = a.length;
for (int i = 0; i < a.len