1.题目描述:
在所有排列中,找出最后一个数值的最小值和最大值;开始楼主写了个全排序一个个判断,
达不到时间复杂度要求,
本题的关键是注意到最小值的求解:结果一定为0或者1,前三个数可以构成最小值0;
并且连续的4个数可以构成最小值0;
2.代码:
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int num = input.nextInt();
for (int i = 0; i < num; i++) {
int testNum = input.nextInt();
int resMin=min(testNum);
int resMax=max(testNum);
System.out.println(resMin+" "+resMax);
}
}
public static int min(int n){
if (n % 4 == 0 || n + 1 % 4 == 0) {
return 0;
}
else
return 1;
}
public static int max(int n){
if(n==1){
return 1;
}
else if(n==2){
return 1;
}
return Math.abs(min(n-1)-n);
}
3.解析:
根据第一个的解析已经能求得最小值,那么最大值怎么求解?
因为Fn的最大值为:
所以需要保证n-1尽量小,Ax尽量大,就是选择n,就可以得到上面结果。